Dátové modelovanie v Cassandre

1. Prehľad

Cassandra je NoSQL databáza, ktorá poskytuje vysokú dostupnosť a horizontálnu škálovateľnosť bez zníženia výkonu.

Aby sme dosiahli najlepší výkon Cassandry, musíme starostlivo navrhnúť schému okolo vzorov dotazov špecifických pre daný obchodný problém.

V tomto článku preskúmame niektoré kľúčové pojmy ako pristupovať k modelovaniu údajov v Cassandre.

Predtým, ako budete pokračovať, môžete si prečítať náš článok o Cassandre s jazykom Java, kde získate základné informácie a informácie o tom, ako sa ku Cassandre pripojiť pomocou Java.

2. Kľúč oddielu

Cassandra je distribuovaná databáza, v ktorej sú dáta rozdelené a uložené na viacerých uzloch v klastri.

Kľúč oddielu je zložený z jedného alebo viacerých údajových polí a je používa oddiel na generovanie tokenu pomocou hashovania na rovnomerné rozloženie údajov v klastri.

3. Kľúč klastra

Klastrový kľúč sa skladá z jedného alebo viacerých polí a pomáha pri zoskupovaní alebo zoskupovaní riadkov s rovnakým kľúčom oddielu a pri ich ukladaní v zoradenom poradí.

Povedzme, že ukladáme údaje časových radov do Cassandry a chceme ich načítať v chronologickom poradí. Kľúč klastra, ktorý obsahuje dátové polia časových radov, bude veľmi užitočný na efektívne načítanie údajov pre tento prípad použitia.

Poznámka: Kombinácia kľúča oddielu a klastrového kľúča tvorí primárny kľúč a jedinečne identifikuje akýkoľvek záznam v klastri Cassandra.

4. Pokyny týkajúce sa vzorov dotazov

Predtým, ako začneme s modelovaním údajov v Cassandre, by sme mali identifikovať vzory dotazov a zabezpečiť, aby vyhovovali nasledujúcim pokynom:

  1. Každý dopyt by mal načítať údaje z jedného oddielu
  2. Mali by sme sledovať, koľko dát sa ukladá v oddiele, pretože Cassandra má limity okolo počtu stĺpcov, ktoré je možné uložiť do jedného oddielu
  3. Je v poriadku denormalizovať a duplikovať údaje, aby sa podporili rôzne druhy vzorov dotazov na rovnaké údaje

Na základe vyššie uvedených pokynov sa pozrime na niektoré prípady použitia v reálnom svete a na to, ako by sme pre ne vymodelovali dátové modely Cassandra.

5. Príklady modelovania údajov v reálnom svete

5.1. Príspevky na Facebooku

Predpokladajme, že v Cassandre ukladáme príspevky na Facebooku od rôznych používateľov. Jeden z bežných vzorov dotazov bude načítavať horných „N„Príspevky od daného používateľa.

Teda musímeukladať všetky údaje o konkrétnom používateľovi do jednej oblasti podľa vyššie uvedených pokynov.

Používanie časovej pečiatky pošta ako klastrového kľúča pomôže aj pri načítaní horných „N„Zverejňuje príspevky efektívnejšie.

Definujme schému tabuľky Cassandra pre tento prípad použitia:

CREATE TABLE posts_facebook (user_id uuid, post_id timeuuid, text obsahu, PRIMÁRNY KLÍČ (user_id, post_id)) S CLUSTERINGOVÝM OBJEDNÁVKOM (post_id DESC);

Poďme teraz napísať dotaz, aby sme našli najlepších 20 príspevkov pre používateľa Anna:

VYBERTE obsah FROM posts_facebook WHERE user_id = "Anna_id" LIMIT 20

5.2. Telocvične po celej krajine

Predpokladajme, že ukladáme podrobnosti o rôznych partnerských telocvičniach v rôznych mestách a štátoch mnohých krajín a chceli by sme načítať telocvične pre dané mesto.

Povedzme tiež, že musíme vrátiť výsledky, ktoré majú telocvične zoradené podľa dátumu otvorenia.

Na základe vyššie uvedených pokynov by sme mali telocvične umiestnené v danom meste konkrétneho štátu a krajiny uložiť na jednu priečku a ako klastrový kľúč použiť dátum otvorenia a názov telocvične.

Definujme pre tento príklad schému tabuľky Cassandra:

CREATE TABLE gyms_by_city (country_code text, state text, city text, gym_name text, opening_date timestamp, PRIMARY KEY ((country_code, state_province, city), (opening_date, gym_name)) WITH CLUSTERING ORDER BY (opening_date ASC, gym_name ASC);

Poďme sa teraz pozrieť na dopyt, ktorý stiahne prvých desať telocviční do dátumu otvorenia pre mesto Phoenix v americkom štáte Arizona:

VYBERTE * FROM gyms_by_city WHERE country_code = "us" AND state = "Arizona" AND city = "Phoenix" LIMIT 10

Ďalej sa pozrieme na dopyt, ktorý načíta desať naposledy otvorených telocviční v meste Phoenix v americkom štáte Arizona:

VYBERTE * FROM gyms_by_city WHERE country_code = "us" a state = "Arizona" a city = "Phoenix" OBJEDNAŤ DO dátumu otvorenia DESC LIMIT 10

Poznámka: Pretože poradie zoradenia posledného dotazu je opačné ako poradie definované počas vytvárania tabuľky, bude dotaz bežať pomalšie, pretože Cassandra najskôr načíta údaje a potom ich zoradí do pamäte.

5.3. Zákazníci a produkty elektronického obchodu

Povedzme, že prevádzkujeme obchod s elektronickým obchodom a že ukladáme internet Zákazník a Výrobok informácie v rámci Cassandry. Pozrime sa na niektoré bežné vzory dotazov v tomto prípade použitia:

  1. Získajte Zákazník Info
  2. Získajte Výrobok Info
  3. Získať všetko Zákazníci ktorí majú radi dané Výrobok
  4. Získať všetko Produkty daný Zákazník má rád

Začneme používaním samostatných tabuliek na ukladanie súborov Zákazník a Výrobok informácie. Potrebujeme však zaviesť primerané množstvo denormalizácie, aby sme podporili 3. a 4. dotaz uvedený vyššie.

Aby sme to dosiahli, vytvoríme ďalšie dve tabuľky - “Customer_by_Product“A„Product_by_Customer“.

Pozrime sa na schému tabuľky Cassandra pre tento príklad:

VYTVORIŤ TABUĽKU Zákazník (text zákazníckeho mena, text mena a priezviska, text priezviska, zaregistrovaná časová značka, PRIMÁRNY KLÍČ (zákaznícke číslo)); CREATE TABLE Produkt (text prdt_id, text nadpisu, PRIMÁRNY KLÍČ (prdt_id)); CREATE TABLE Customer_By_Liked_Product (páčený_prdt_id text, páčený_on časová pečiatka, text nadpisu, text zákazníckeho mena, text prvého mena, priezvisko text, PRIMÁRNY KLÍČ (prdt_id, páčené_on)); CREATE TABLE Product_Liked_By_Customer (cust_id text, first_name text, last_name text, Like_prdt_id text, Like_on časová známka, text nadpisu, PRIMÁRNY KLÍČ (cust_id, Like_on));

Poznámka: Na podporu dotazov, nedávno obľúbených produktov od daného zákazníka aj zákazníkov, ktorým sa daný produkt nedávno páčil, sme použili „páčilo sa_on”Stĺpec ako klastrový kľúč.

Pozrime sa na dopyt, aby sme našli desať zákazníkov, ktorým sa produkt páčil naposledy “Pepsi“:

VYBERTE * Z FROM Customer_By_Liked_Product WHERE title = "Pepsi" LIMIT 10

A pozrime sa na dopyt, ktorý nájde nedávno obľúbené produkty (až desať) od zákazníka s názvom „Anna“:

SELECT * FROM Product_Liked_By_Customer WHERE first_name = "Anna" LIMIT 10

6. Neefektívne vzory dotazov

Vzhľadom na spôsob, akým Cassandra ukladá údaje, niektoré vzory dotazov nie sú vôbec efektívne, vrátane nasledujúcich:

  • Načítanie údajov z viacerých oddielov - bude to vyžadovať, aby koordinátor načítal údaje z viacerých uzlov, dočasne ich uložil na hromadu a potom zhromaždil údaje pred vrátením výsledkov používateľovi
  • Pripojené dotazy - vzhľadom na svoju distribuovanú povahu Cassandra nepodporuje spájanie tabuliek v dotazoch rovnakým spôsobom ako relačná databáza, a vo výsledku dotazy spripojenia budú pomalšie a môžu tiež viesť k problémom s nekonzistenciou a dostupnosťou

7. Záver

V tomto tutoriáli sme sa venovali niekoľkým osvedčeným postupom týkajúcem sa prístupu k modelovaniu údajov v Cassandre.

Pochopenie základných pojmov a identifikácia vzorov dotazov vopred je nevyhnutná pre návrh správneho dátového modelu, ktorý získa najlepší výkon z klastra Cassandra.


$config[zx-auto] not found$config[zx-overlay] not found