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: