Cassandra Kolekcje: zestaw, lista i mapa w CQL z przykładem

⚡ Inteligentne podsumowanie

Cassandra Kolekcje przechowują kilka wartości w jednej kolumnie, używając typów zestawów, list i map. Ta strona wyjaśnia każdy typ, składnię języka CQL służącą do ich tworzenia i wypełniania, sposób aktualizacji elementów oraz limity rozmiaru, które decydują o tym, czy kolekcja jest niewłaściwym wyborem.

  • 📦 Trzy typy: Zestaw przechowuje unikalne, nieuporządkowane wartości, lista zachowuje kolejność wstawiania, a mapa przechowuje pary klucz-wartość.
  • 🔤 Ustaw zachowanie: Elementy są przechowywane posortowane, a duplikaty są automatycznie usuwane.
  • 🔢 Zastrzeżenie dotyczące listy: Kolejność jest zachowana, ale operacje dodawania na początku i indeksowania wymagają odczytu przed zapisem.
  • 🗺️. Użycie mapy: Mapa pasuje do atrybutów, których klucze nie są znane podczas projektowania schematu.
  • 📏 Limit rozmiaru: Utrzymuj niewielkie kolekcje; odczytywana jest cała kolekcja, nawet gdy potrzebny jest tylko jeden element.
  • 🧊 Opcja mrożona: Zamrożona kolekcja jest przechowywana jako jedna wartość i musi zostać w całości zastąpiona.

Cassandra Mapa listy zestawów kolekcji

Jakie są Cassandra Kolekcje?

Cassandra kolekcje są dobrym sposobem na obsługę zadań. W kolekcjach można przechowywać wiele elementów. Istnieją ograniczenia w Cassandra kolekcje.

  • Kolumna kolekcji nie może przechowywać więcej niż 64 KB danych w pojedynczej wartości.
  • Utrzymuj małą kolekcję, aby uniknąć obciążenia związanego z wyszukiwaniem kolekcji, ponieważ cała kolekcja jest odczytywana, nawet jeśli potrzebny jest tylko jeden element.
  • Przechowywanie danych większych niż 64 KB oznacza, że ​​można zapytać tylko o pierwsze 64 KB, co powoduje utratę danych.
  • Niezamrożona kolekcja jest ograniczona do około 65 535 elementów, a każdy element traktowany jest jako pojedyncza jednostka.

Te ograniczenia wskazują na jedną zasadę: kolekcje pasują do kilku atrybutów przypisanych do wiersza, a nie do listy otwartej, która rośnie wraz z użytkowaniem. Wszystko, co stale rośnie, powinno być umieszczane w kolumnach klastrowych własnej tabeli.

Rodzaje Cassandra Kategorie

Istnieją głównie trzy typy kolekcji Cassandra obsługuje:

  1. Zestaw
  2. Lista
  3. Mapa

Cassandra Ustaw kolekcję

Zestaw przechowuje grupę elementów, która podczas wykonywania zapytania zwraca posortowane elementy.

Składnia

Poniżej znajduje się składnia kolekcji Set, w której przechowywane są liczne adresy e-mail nauczyciela.

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

Przykład

Poniżej znajduje się migawka, w której utworzono tabelę „Nauczyciel” z kolumną „E-mail” jako kolekcją.

Przykład Cassandra Ustaw kolekcję

Oto migawka, w której dane są wstawiane do kolekcji.

Przykład Cassandra Ustaw kolekcję

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

Poszczególne elementy dodaje się lub usuwa bez konieczności ponownego tworzenia całego zbioru, co jest główną zaletą niezamrożonego zbioru.

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 Kolekcja list

Gdy kolejność elementów ma znaczenie, używana jest lista.

Przykład

Oto migawka, w której do tabeli „Nauczyciel” dodano kolumnę kursów typu lista.

Przykład Cassandra Kolekcja list

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

Oto migawka, na której wstawiane są dane w kolumnie „nazwy kursów”.

Przykład Cassandra Kolekcja list

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

Oto migawka pokazująca bieżący stan bazy danych po wstawieniu.

Cassandra Przykład zbioru list

Elementy można dołączać lub dodawać na początku, chociaż zarówno dodawanie na początku, jak i aktualizowanie według indeksu wymaga Cassandra aby najpierw przeczytać listę, co sprawia, że ​​jest to wolniejsze niż dołączanie.

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

Cassandra Kolekcja map

Mapa to typ kolekcji używany do przechowywania par klucz-wartość. Jak sama nazwa wskazuje, odwzorowuje jedną rzecz na drugą.

Na przykład, jeśli chcesz zapisać nazwę kursu z wymaganą nazwą kursu, można użyć kolekcji map.

Przykład

Oto migawka, na której tworzony jest typ mapy dla nazwy kursu i jego wstępnie wymaganej nazwy kursu.

Przykład Cassandra Kolekcja map

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

Oto migawka, na której wstawiane są dane w typie kolekcji map.

Przykład Cassandra Kolekcja map

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

Pojedynczy wpis można ustawić lub usunąć nie naruszając reszty mapy.

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

Zestaw kontra lista kontra mapa: wybór kolekcji

Te trzy typy wyglądają zamiennie, ale różnią się gwarancjami kolejności i kosztami aktualizacji.

WYGLĄD Zestaw Lista Mapa
Kolejność Posortowane według wartości Zachowano kolejność wstawiania Posortowane według klucza
Duplikaty Niedozwolone Dozwolony Klucze unikalne
Koszt aktualizacji Tani, nie wymaga czytania Dodawanie taniego; dodawanie na początku i aktualizacja indeksu wymagają odczytu Tani na klucz
Najlepszy dla Tagi, adresy e-mail, unikalne etykiety Uporządkowane kroki, w których duplikaty mają znaczenie Nazwane atrybuty z nieprzewidywalnymi kluczami

Lepiej wybrać zestaw niż listę, chyba że kolejność ma naprawdę znaczenie, ponieważ operacje indeksowania listy tworzą nagrobki i mogą dawać zaskakujące rezultaty podczas równoczesnego zapisu. zamrożone do dowolnego z trzech sklepów, przechowuje ją jako jedną niezmienną wartość, co pozwala na pojawienie się kolekcji w kluczu podstawowym, ale eliminuje aktualizacje na poziomie elementów.

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

Jeśli kolekcja przekraczałaby kilkadziesiąt elementów, należy modelować ją jako osobną tabelę, w której element stanowiłby kolumnę klastrującą, postępując zgodnie z podejściem opisanym w Cassandra reguły modelu danych. Filtrowanie zawartości kolekcji wymaga indeksu, który jest omówiony w tworzenie i usuwanie indeksu poradnik.

FAQ

Tak, gdy indeks już istnieje. Użyj CONTAINS dla wartości zestawów i list oraz CONTAINS KEY dla kluczy map po utworzeniu pasującego indeksu VALUES, KEYS lub ENTRIES.

Tylko wtedy, gdy kolekcja wewnętrzna jest zamrożona, na przykład gdy mapa tekstu jest zamrożona na liście tekstu. Odmrożona kolekcja nie może zawierać innej kolekcji.

Przypisanie nowej kolekcji najpierw usuwa wszystkie istniejące elementy, tworząc nagrobek zakresu. Dodawanie i usuwanie pojedynczych elementów pozwala uniknąć tego problemu i jest preferowanym wzorcem.

Biorąc pod uwagę oczekiwaną liczbę elementów i wzorzec aktualizacji, AI dobrze stosuje regułę: ograniczona i mała reguła faworyzuje kolekcję, a nieograniczona lub często wyszukiwana reguła faworyzuje kolumnę klastrującą.

Zazwyczaj, choć często myli nawiasy klamrowe z nawiasami listy i pomija „frozen”, gdy wymaga tego klucz podstawowy. Najpierw uruchom wygenerowane instrukcje w przestrzeni kluczy testowych.

Podsumuj ten post następująco: