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

⚡ Розумний підсумок

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

  • 📦 Три типи: Множина (set) містить унікальні невпорядковані значення, список (list) зберігає порядок вставки, а мап зберігає пари ключ-значення.
  • 🔤 Поведінка набору: Елементи зберігаються відсортованими, а дублікати автоматично видаляються.
  • 🔢 Застереження щодо списку: Порядок зберігається, але операції додавання на початок та індексування вимагають читання перед записом.
  • 🗺️ Використання карти: Карта підходить для атрибутів, ключі яких невідомі на момент проектування схеми.
  • 📏 Обмеження розміру: Зберігайте колекції невеликими; вся колекція зчитується, навіть коли потрібен один елемент.
  • 🧊 Заморожений варіант: Заморожена колекція зберігається як одне значення і має бути повністю замінена.

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

Які Cassandra Колекції?

Cassandra колекції — це хороший спосіб вирішення завдань. Кілька елементів можна зберігати в колекціях. Є обмеження в Cassandra колекцій.

  • Стовпець колекції не може зберігати більше 64 КБ даних в одному значенні.
  • Зберігайте колекцію невеликою, щоб уникнути накладних витрат на запити до колекції, оскільки вся колекція зчитується, навіть коли потрібен лише один елемент.
  • Зберігання понад 64 КБ означає, що можна запитувати лише перші 64 КБ, що призводить до втрати даних.
  • Розморожена колекція обмежена приблизно 65 535 елементами, і кожен елемент зчитується разом як єдине ціле.

Ці обмеження вказують на одне правило: колекції підходять для кількох атрибутів, приєднаних до рядка, а не для відкритого списку, який зростає в міру використання. Все, що продовжує зростати, належить до кластеризаційних стовпців окремої таблиці.

Види Cassandra Колекції

Існує в основному три типи колекцій, які Cassandra підтримує:

  1. Установка
  2. список
  3. карта

Cassandra Набір колекції

Набір зберігає групу елементів, яка повертає відсортовані елементи під час запиту.

синтаксис

Ось синтаксис колекції 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 правила моделі данихФільтрація за вмістом колекції вимагає індексу, описаного в створення та видалення індексу навчальний посібник.

Поширені запитання

Так, щойно індекс існує. Використовуйте CONTAINS для значень наборів та списків, а CONTAINS KEY для ключів карти після створення відповідного індексу VALUES, KEYS або ENTRIES.

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

Призначення нової колекції спочатку видаляє кожен існуючий елемент, записуючи надгробок діапазону. Додавання та видалення окремих елементів дозволяє уникнути цього та є бажаним шаблоном.

Враховуючи очікувану кількість елементів та шаблон оновлення, ШІ добре застосовує правило: обмежені та малі значення віддають перевагу колекції, необмежені або часто запитувані значення віддають перевагу кластеризаційному стовпцю.

Здебільшого, хоча він часто плутає дужки типу set зі дужками типу list та пропускає frozen, де цього вимагає первинний ключ. Спочатку запустіть згенеровані оператори для тестового простору ключів.

Підсумуйте цей пост за допомогою: