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

Какви са Cassandra Колекции?
Cassandra колекциите са добър начин за справяне със задачи. Множество елементи могат да се съхраняват в колекции. Има ограничения в Cassandra колекции.
- Колона от колекция не може да съхранява повече от 64 KB данни в една стойност.
- Поддържайте колекцията малка, за да предотвратите разходите за заявки към нея, защото цялата колекция се чете, дори когато е необходим само един елемент.
- Съхраняването на повече от 64 KB означава, че могат да бъдат заявени само първите 64 KB, което води до загуба на данни.
- Размразената колекция е ограничена до приблизително 65 535 елемента и всеки елемент се чете заедно като едно цяло.
Тези ограничения сочат към едно правило: колекциите са подходящи за шепа атрибути, прикрепени към ред, а не за отворен списък, който расте с употребата. Всичко, което продължава да расте, принадлежи към клъстериране на колони в собствената си таблица.
Видове Cassandra колекции
Има основно три вида колекции, които Cassandra поддържа:
- комплект
- списък
- Карта
Cassandra Комплект колекция
Set съхранява група от елементи, която връща сортирани елементи при заявка.
Синтаксис
Ето синтаксиса на колекцията Set, която съхранява множество имейл адреси за учителя.
CREATE TABLE University.Teacher ( id int, Name text, Email set<text>, PRIMARY KEY (id) );
Пример
Ето моментната снимка, където таблицата „Учител“ е създадена с колона „Имейл“ като колекция.
Ето моментната снимка, където данните се вмъкват в колекцията.
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 Списък колекция
Когато редът на елементите има значение, се използва списъкът.
Пример
Ето е моментната снимка, където в таблицата „Учител“ е добавена колона с курсове от тип списък.
ALTER TABLE University.Teacher ADD coursenames list<text>;
Ето моментната снимка, където данните се вмъкват в колона „имена на курсове“.
INSERT INTO University.Teacher (id, Name, Email, coursenames) VALUES (2, 'Hamilton', {'hamilton@hotmail.com'}, ['Data Science']);
Ето моментната снимка, която показва текущото състояние на базата данни след вмъкването.
Елементите могат да бъдат добавяни или поставяни в началото, въпреки че добавянето в началото и актуализирането по индекс изискват Cassandra първо да прочетат списъка, което ги прави по-бавни от добавянето.
UPDATE University.Teacher SET coursenames = coursenames + ['Machine Learning'] WHERE id = 2; UPDATE University.Teacher SET coursenames = ['Statistics'] + coursenames WHERE id = 2;
Cassandra Колекция от карти
Картата е тип колекция, която се използва за съхраняване на двойки ключ стойност. Както подсказва името му, той преобразува едно нещо в друго.
Например, ако искате да запазите името на курса с неговото задължително име на курса, може да се използва колекция от карти.
Пример
Ето моментната снимка, където се създава тип карта за името на курса и името на предпоставката за курс.
CREATE TABLE University.Course ( id int, prereq map<text, text>, PRIMARY KEY (id) );
Ето моментната снимка, където данните се вмъкват в тип колекция от карти.
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 правила за модел на данниФилтрирането по съдържание на колекцията изисква индекс, обхванат в създаване и премахване на индекс настойнически.






