Cassandra Коллекции: набор, список и отображение в CQL с примером

⚡ Умное резюме

Cassandra Коллекции хранят несколько значений в одном столбце, используя типы данных set, list и map. На этой странице объясняется каждый тип, синтаксис CQL для их создания и заполнения, как обновлять элементы, а также ограничения по размеру, определяющие, когда коллекция является неподходящим вариантом.

  • 📦 Три типа: Множество (Set) хранит уникальные неупорядоченные значения, список (List) сохраняет порядок добавления, а карта (Map) хранит пары ключ-значение.
  • 🔤 Установить поведение: Элементы хранятся в отсортированном виде, а дубликаты автоматически удаляются.
  • 🔢 Примечание к списку: Порядок сохраняется, но для операций добавления в начало и индексации требуется чтение перед записью.
  • 🗺️ Использование карты: Карта подходит для атрибутов, ключи которых неизвестны на этапе проектирования схемы.
  • 📏 Ограничение размера: Не делайте подборки небольшими; вся подборка будет прочитана, даже если потребуется прочитать только один элемент.
  • 🧊 Вариант с заморозкой: Замороженная коллекция хранится как одно значение и должна быть полностью заменена.

Cassandra Карта списка коллекций

Каковы Cassandra Коллекции?

Cassandra коллекции — хороший способ решения задач. В коллекциях можно хранить несколько элементов. Существуют ограничения в Cassandra коллекции.

  • В столбце коллекции не может храниться более 64 КБ данных в одном значении.
  • Чтобы избежать накладных расходов на запросы к коллекции, следует использовать небольшой размер коллекции. Ведь даже если нужен всего один элемент, считывается вся коллекция целиком.
  • Хранение более 64 КБ данных означает, что запросу подлежат только первые 64 КБ, что приводит к потере данных.
  • Незамороженная коллекция ограничена примерно 65 535 элементами, и каждый элемент воспринимается как единое целое.

Эти ограничения указывают на одно правило: коллекции подходят для небольшого количества атрибутов, прикрепленных к строке, а не для неограниченного списка, который растет по мере использования. Все, что постоянно растет, должно быть помещено в кластерные столбцы собственной таблицы.

Виды Cassandra Коллекции

В основном существуют три типа коллекций, которые Cassandra поддерживает:

  1. Поставьте
  2. Список
  3. Карта

Cassandra Установить коллекцию

Set хранит группу элементов, которая возвращает отсортированные элементы при запросе.

Синтаксис

Вот синтаксис коллекции Set, в которой хранятся несколько адресов электронной почты учителя.

CREATE TABLE University.Teacher (
    id int,
    Name text,
    Email set<text>,
    PRIMARY KEY (id)
);

Пример

Вот снимок, где создается таблица «Учитель» со столбцом «Электронная почта» в качестве коллекции.

Пример Cassandra Установить коллекцию

Вот снимок, на котором данные вставляются в коллекцию.

Пример Cassandra Установить коллекцию

INSERT INTO University.Teacher (id, Name, Email)
VALUES (1, 'Guru99', {'abc@gmail.com', 'xyz@hotmail.com'});

Добавление или удаление отдельных элементов происходит без перезаписи всего набора, что является главным преимуществом сохранения коллекции в незамороженном виде.

UPDATE University.Teacher SET Email = Email + {'new@guru99.com'} WHERE id = 1;
UPDATE University.Teacher SET Email = Email - {'xyz@hotmail.com'} WHERE id = 1;

Cassandra Список Коллекция

Когда порядок элементов имеет значение, используется список.

Пример

Вот снимок экрана, на котором в таблицу «Учитель» добавлен столбец «Курсы» в виде списка.

Пример Cassandra Список Коллекция

ALTER TABLE University.Teacher ADD coursenames list<text>;

Вот снимок, где данные вставляются в столбец «названия курсов».

Пример Cassandra Список Коллекция

INSERT INTO University.Teacher (id, Name, Email, coursenames)
VALUES (2, 'Hamilton', {'hamilton@hotmail.com'}, ['Data Science']);

Вот снимок, показывающий текущее состояние базы данных после вставки.

Cassandra Пример коллекции списка

Элементы могут быть добавлены или добавлены в начало, хотя добавление в начало и обновление по индексу требуют Cassandra Сначала нужно прочитать список, что делает этот процесс медленнее, чем добавление элементов.

UPDATE University.Teacher SET coursenames = coursenames + ['Machine Learning'] WHERE id = 2;
UPDATE University.Teacher SET coursenames = ['Statistics'] + coursenames WHERE id = 2;

Cassandra Коллекция карт

Карта — это тип коллекции, который используется для хранения пар ключ-значение. Как следует из названия, он сопоставляет одно с другим.

Например, если вы хотите сохранить название курса с обязательным названием курса, можно использовать коллекцию карт.

Пример

Вот снимок, на котором создается тип карты для имени курса и имени обязательного курса.

Пример Cassandra Коллекция карт

CREATE TABLE University.Course (
    id int,
    prereq map<text, text>,
    PRIMARY KEY (id)
);

Вот снимок, на котором данные вставляются в тип коллекции карт.

Пример Cassandra Коллекция карт

INSERT INTO University.Course (id, prereq)
VALUES (1, {'DataScience': 'Database', 'Neural Network': 'Artificial Intelligence'});

Отдельная запись устанавливается или удаляется без изменения остальной части карты.

UPDATE University.Course SET prereq['Robotics'] = 'Linear Algebra' WHERE id = 1;
DELETE prereq['DataScience'] FROM University.Course WHERE id = 1;

Набор, список или карта: выбор коллекции

Эти три типа кажутся взаимозаменяемыми, но различаются гарантиями заказа и стоимостью обновления.

Аспект Поставьте Список Карта
Заказать Отсортировано по значению Порядок вставки сохранен. Отсортировано по ключу
Дубликаты Не положено Разрешено Уникальные ключи
Стоимость обновления Недорого, читать не нужно Добавление данных обходится недорого; добавление данных в начало и обновление индекса требуют чтения. Дешево за ключ
лучше всего для Теги, адреса электронной почты, уникальные метки Упорядоченные шаги, где дубликаты имеют смысл. Именованные атрибуты с непредсказуемыми ключами

Предпочтительнее использовать множество, а не список, если порядок действительно не имеет значения, поскольку операции с индексами в списках создают «надгробные камни» и могут давать неожиданные результаты при одновременной записи. Добавление замороженные В любое из трех хранилищ оно отображается как одно неизменяемое значение, что позволяет коллекции отображаться в качестве первичного ключа, но исключает обновления на уровне элементов.

CREATE TABLE University.Enrolment (
    id int,
    tags frozen<set<text>>,
    PRIMARY KEY (id, tags)
);

Если коллекция содержит более нескольких десятков элементов, смоделируйте её как отдельную таблицу, используя элемент в качестве столбца для кластеризации, следуя подходу, описанному в [ссылка на описание]. Cassandra правила модели данныхДля фильтрации по содержимому коллекции необходим индекс, описание которого приведено в соответствующем разделе. создать и удалить индекс учебное пособие.

Часто задаваемые вопросы (FAQ)

Да, после создания индекса. Используйте CONTAINS для значений множеств и списков, и CONTAINS KEY для ключей карт после создания соответствующего индекса VALUES, KEY или ENTRIES.

Только если внутренняя коллекция заморожена, например, карта текста, привязанная к замороженному списку текста. Незамороженная коллекция не может содержать другую коллекцию.

При создании новой коллекции сначала удаляются все существующие элементы, что приводит к записи "уничтожительного элемента" в диапазон. Добавление и удаление отдельных элементов позволяет избежать этого и является предпочтительным подходом.

Учитывая ожидаемое количество элементов и схему обновления, ИИ хорошо применяет это правило: ограниченное и небольшое количество элементов благоприятствует выбору коллекции, неограниченное или часто запрашиваемое количество элементов благоприятствует выбору кластерного столбца.

В основном, хотя часто путает фигурные скобки с квадратными скобками списков и пропускает замороженные значения там, где это требуется для первичного ключа. Сначала выполните сгенерированные запросы к тестовому пространству ключей.

Подведем итог этой публикации следующим образом: