Cassandra Sbírky: Set, List & Map v CQL s příkladem

⚡ Chytré shrnutí

Cassandra Kolekce ukládají několik hodnot v jednom sloupci pomocí typů set, list a map. Tato stránka vysvětluje každý typ, syntaxi CQL pro jejich vytváření a naplňování, jak aktualizovat prvky a omezení velikosti, která rozhodují o tom, kdy je kolekce špatnou volbou.

  • ???? Tři typy: Sada (set) uchovává jedinečné neuspořádané hodnoty, seznam (list) zachovává pořadí vkládání a mapa (map) ukládá páry klíč-hodnota.
  • 🔤 Chování nastavení: Prvky jsou uloženy seřazené a duplikáty jsou automaticky zahozeny.
  • 🔢 Upozornění na seznam: Pořadí je zachováno, ale operace předřazení a indexování vyžadují čtení před zápisem.
  • 🗺️ Použití mapy: Mapa vyhovuje atributům, jejichž klíče nejsou v době návrhu schématu známy.
  • 📏 Limit velikosti: Udržujte kolekce malé; celá kolekce se přečte, i když je potřeba jeden prvek.
  • 🧊 Zmrazená varianta: Zmrazená kolekce je uložena jako jedna hodnota a musí být kompletně nahrazena.

Cassandra Mapa seznamů kolekcí

Jaké jsou Cassandra sbírky?

Cassandra kolekce jsou dobrým způsobem pro řešení úkolů. V kolekcích lze uložit více prvků. Existují omezení v Cassandra řadu.

  • Sloupec kolekce nemůže v jedné hodnotě uložit více než 64 KB dat.
  • Udržujte kolekci malou, abyste předešli režijním nákladům na dotazování kolekce, protože celá kolekce se čte, i když je potřeba pouze jeden prvek.
  • Uložení více než 64 KB znamená, že lze dotazovat pouze prvních 64 KB, což má za následek ztrátu dat.
  • Nezmrazená kolekce je omezena na zhruba 65 535 prvků a každý prvek je čten dohromady jako jedna jednotka.

Tato omezení poukazují na jedno pravidlo: kolekce vyhovují hrstce atributů připojených k řádku, nikoli otevřenému seznamu, který se s používáním rozrůstá. Všechno, co neustále roste, patří do shlukujících se sloupců vlastní tabulky.

Druhy Cassandra Kolekce

Existují především tři typy kolekcí, které Cassandra podporuje:

  1. sada
  2. Seznam
  3. Mapa

Cassandra Set Collection

Sada ukládá skupinu prvků, které při dotazování vrací seřazené prvky.

Syntax

Zde je syntaxe kolekce Set, která ukládá více e-mailových adres pro učitele.

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

Příklad

Zde je snímek, kde je vytvořena tabulka „Učitel“ se sloupcem „E-mail“ jako kolekcí.

Příklad Cassandra Set Collection

Zde je snímek, kde jsou data vkládána do kolekce.

Příklad Cassandra Set Collection

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

Jednotlivé prvky se přidávají nebo odebírají bez přepisování celé sady, což je hlavní výhoda ponechání kolekce nezmrazené.

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 Kolekce seznamu

Pokud na pořadí prvků záleží, použije se seznam.

Příklad

Zde je snímek, kde je v tabulce „Učitel“ přidán sloupec kurzů typu seznam.

Příklad Cassandra Kolekce seznamu

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

Zde je snímek, kde jsou data vkládána do sloupce „názvy kurzů“.

Příklad Cassandra Kolekce seznamu

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

Zde je snímek, který ukazuje aktuální stav databáze po vložení.

Cassandra Příklad kolekce seznamu

Prvky lze přidávat nebo zařazovat, ačkoli zařazování a aktualizace indexem vyžadují Cassandra nejdříve si přečíst seznam, což je zpomaluje než přidávání.

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

Cassandra Sbírka map

Mapa je typ kolekce, který se používá k ukládání párů klíč-hodnota. Jak už název napovídá, mapuje jednu věc na druhou.

Chcete-li například uložit název kurzu s názvem požadovaného kurzu, lze použít kolekci map.

Příklad

Zde je snímek, kde je vytvořen typ mapy pro název kurzu a název jeho předpokladu.

Příklad Cassandra Sbírka map

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

Zde je snímek, kde se vkládají data v typu kolekce map.

Příklad Cassandra Sbírka map

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

Jeden záznam se nastaví nebo odstraní, aniž by se dotkl zbytku mapy.

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

Sada vs. seznam vs. mapa: Výběr kolekce

Tyto tři typy vypadají zaměnitelné, ale liší se zárukami objednání a náklady na aktualizaci.

Vzhled sada Seznam Mapa
Řazení Seřazeno podle hodnoty Objednávka vložení zachována Seřazeno podle klíče
Duplikáty Není povoleno Povoleno Unikátní klíče
Aktualizovat cenu Levné, není potřeba nic číst Přidat levně; předřazení a aktualizace indexu vyžadují čtení Levné za klíč
Nejlepší pro Štítky, e-mailové adresy, unikátní štítky Seřazené kroky, kde jsou duplikáty smysluplné Pojmenované atributy s nepředvídatelnými klíči

Upřednostňujte sadu před seznamem, pokud na pořadí skutečně nezáleží, protože operace s indexy seznamů vytvářejí náhrobky a mohou při souběžných zápisech vést k překvapivým výsledkům. zmrazené do kterékoli ze tří ukládá ji jako jednu neměnnou hodnotu, což umožňuje kolekci zobrazit se v primárním klíči, ale odstraňuje aktualizace na úrovni elementů.

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

Pokud by kolekce překročila několik desítek prvků, modelujte ji jako samostatnou tabulku s prvkem jako shlukovacím sloupcem podle přístupu v Cassandra pravidla datového modeluFiltrování obsahu kolekce vyžaduje index, který je popsán v vytvořit a smazat index výukový program.

Nejčastější dotazy

Ano, jakmile index existuje. Pro hodnoty sad a seznamů použijte CONTAINS a pro klíče mapy CONTAINS KEY po vytvoření odpovídajícího indexu VALUES, KEYS nebo ENTRIES.

Pouze pokud je vnitřní kolekce zmrazená, například mapa textu na zmrazený seznam textu. Nezmrazená kolekce nemůže obsahovat jinou kolekci.

Přiřazení nové kolekce nejprve smaže všechny existující prvky a zapíše tak rozsahový náhrobek. Přidávání a odebírání jednotlivých prvků se tomuto vyhne a je preferovaným vzorem.

Vzhledem k očekávanému počtu prvků a vzoru aktualizace umělá inteligence toto pravidlo dobře aplikuje: omezené a malé hodnoty upřednostňují kolekci, neohraničené nebo často dotazované hodnoty upřednostňují shlukující se sloupec.

Většinou se však často plete složené závorky se závorkami typu list a vynechává frozen tam, kde to primární klíč vyžaduje. Nejprve spusťte vygenerované příkazy s testovacím klíčovým prostorem.

Shrňte tento příspěvek takto: