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.
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:
- Zestaw
- Lista
- 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ą.
Oto migawka, w której dane są wstawiane do kolekcji.
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.
ALTER TABLE University.Teacher ADD coursenames list<text>;
Oto migawka, na której wstawiane są dane w kolumnie „nazwy kursów”.
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.
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.
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.
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.







