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

⚡ Умно обобщение

Cassandra Колекциите съхраняват няколко стойности в една колона, използвайки типовете set, list и map. Тази страница обяснява всеки тип, CQL синтаксиса за създаването и попълването им, как да се актуализират елементи и ограниченията за размер, които определят кога дадена колекция е грешен избор.

  • 📦 Три вида: Set съхранява уникални неподредени стойности, list запазва реда на вмъкване, а map съхранява двойки ключ и стойност.
  • 🔤 Зададено поведение: Елементите се съхраняват сортирани, а дубликатите се изхвърлят автоматично.
  • 🔢 Предупреждение за списъка: Редът се запазва, но операциите по добавяне на начален елемент (prepend) и индексиране (indexing) изискват четене преди запис.
  • ️ Използване на картата: Картата е подходяща за атрибути, чиито ключове не са известни при проектирането на схемата.
  • 📏 Ограничение на размера: Поддържайте колекциите малки; цялата колекция се чете, дори когато е необходим един елемент.
  • 🧊 Замразена опция: Замразената колекция се съхранява като една стойност и трябва да бъде заменена изцяло.

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

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

Cassandra колекциите са добър начин за справяне със задачи. Множество елементи могат да се съхраняват в колекции. Има ограничения в Cassandra колекции.

  • Колона от колекция не може да съхранява повече от 64 KB данни в една стойност.
  • Поддържайте колекцията малка, за да предотвратите разходите за заявки към нея, защото цялата колекция се чете, дори когато е необходим само един елемент.
  • Съхраняването на повече от 64 KB означава, че могат да бъдат заявени само първите 64 KB, което води до загуба на данни.
  • Размразената колекция е ограничена до приблизително 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 правила за модел на данниФилтрирането по съдържание на колекцията изисква индекс, обхванат в създаване и премахване на индекс настойнически.

Въпроси и Отговори

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

Само ако вътрешната колекция е замразена, например съпоставяне на текст към замразен списък с текст. Размразена колекция не може да съдържа друга колекция.

Присвояването на нова колекция първо изтрива всеки съществуващ елемент, като записва надгробен камък (надгробен камък) за диапазон. Добавянето и премахването на отделни елементи избягва това и е предпочитаният модел.

Като се има предвид очакваният брой елементи и моделът на актуализиране, изкуственият интелект прилага правилото добре: ограничените и малки елементи предпочитат колекция, а неограничените или често запитвани - клъстеризирана колона.

Най-често, макар че бърка скобите тип set ​​със списъчните скоби и пропуска frozen, където първичният ключ го изисква. Първо изпълнете генерирани оператори спрямо тестово ключово пространство.

Обобщете тази публикация с: