Cassandra TTL & Cassandra Datové typy CQL (příklad)

⚡ Chytré shrnutí

Cassandra Datové typy definují, co může každý sloupec obsahovat, a TTL řídí, jak dlouho hodnota přežije, než automaticky vyprší její platnost. Tato stránka uvádí všechny typy CQL, vysvětluje mechanismus vypršení platnosti a popisuje chování náhrobků, které následuje po vypršení platnosti.

  • 🔤 Rodiny typů: CQL seskupuje typy do kategorií text, číslo, datum a čas, identifikátor a kolekce.
  • 🔢 Číselná volba: Funkce tinyint až varint pokrývá každou celočíselnou šířku, zatímco funkce decimal zachovává přesnou přesnost pro peníze.
  • 🆔 UUID vs. TimeUUID: timeuuid vkládá časové razítko a seřazuje chronologicky, takže se hodí pro časově uspořádané shlukovací sloupce.
  • Základy TTL: Hodnota ttl v sekundách nastavená v době vložení automaticky smaže data po jejím uplynutí.
  • 🪦 Chování při vypršení platnosti: Data s vypršenou platností se stávají neplatnými a fyzicky se odstraní až po zhuštění.
  • 🧊 Zmrazené druhy: Označení kolekce nebo n-tice jako zmrazené ji uloží jako jednu neměnnou hodnotu, kterou je nutné celou nahradit.

Cassandra Datové typy TTL CQL

Cassandra Typy dat

Cassandra podporuje různé typy datových typů. Zde je tabulka, která ukazuje datové typy, jejich konstanty a popis.

Typ CQL Konstanty Description
ascii Strings Řetězec znaků US-Ascii
bigint Celé číslo 64bitová podepsaná délka
kapka kuličky Libovolné bajty v šestnáctkové soustavě
boolean Booleany Pravda nebo lež
proti Celé číslo Distribuované hodnoty čítače 64 bitů
datum Celá čísla, řetězce Datum v kalendáři bez časové složky
desetinný Celá čísla, plovoucí čísla S proměnnou přesností v desítkové soustavě
zdvojnásobit Celá čísla, plovoucí čísla 64bitová plovoucí desetinná čárka
trvání Trvání Rozpětí měsíců, dnů a nanosekund
vznášet se Celá čísla, plovoucí čísla 32bitová plovoucí desetinná čárka
zmrazené N-tice, kolekce, uživatelsky definované typy Ukládá vícedílnou hodnotu jako jeden neměnný objekt blob.
inet Strings IP adresa ve formátu IPv4 nebo IPv6
int Celé číslo 32bitové celé číslo se znaménkem
lest Uspořádaná kolekce prvků
mapa Kolekce párů klíčů a hodnot ve stylu JSON
sada Neuspořádaná kolekce unikátních prvků
smallint Celé číslo 16bitové celé číslo se znaménkem
(souhrnně „Stránka (Stránky)“), a naše postupy pro shromažďování, využívání, uchovávání, ochranu a zpřístupnění takových informací. Tyto zásady platí pro informace, které shromažďujeme na těchto stránkách nebo v e-mailu, textových a jiných elektronických zprávách mezi vámi a těmito stránkami. Rovněž popisují vaše možnosti týkající se využívání vašich osobních údajů, přístupu k nim a jejich opravě. Strings Řetězec kódovaný UTF-8
čas Celá čísla, řetězce Denní čas s přesností na nanosekundy
timestamp Celá čísla, řetězce Datum plus čas, kódované v milisekundách od epochy
timeuid UUID UUID typu 1, seřaditelné podle času vložení
tinyint Celé číslo 8bitové celé číslo se znaménkem
n-tice Pevná skupina typovaných polí
Nový UUID Standardní UUID
varchar Strings Řetězec kódovaný v UTF-8, alias textu
varianta Celé číslo Libovolné přesné celé číslo

Tři možnosti v tomto seznamu způsobují většinu chyb v modelování, proto je vhodné je explicitně uvést.

  • text proti varcharu. Jsou stejného typu. Oba názvy fungují a jejich míchání nepřidává žádnou hodnotu.
  • časové razítko oproti timeuuid. Pro zaznamenání, kdy se něco stalo, použijte časové razítko. Pokud mnoho událostí sdílí milisekundu, použijte timeuuid jako shlukovací sloupec, protože UUID zaručuje jedinečnost a zároveň se stále třídí podle času.
  • desetinné číslo proti dvojnásobku. Peněžní hodnoty patří do desítkové soustavy. Dvojitá soustava (double) zavádí binární chybu zaokrouhlování, která se hromadí napříč agregacemi.

A proti Sloupec má speciální omezení: tabulka může obsahovat sloupce typu čítač nebo běžné sloupce, nikdy ne obojí, a řádky typu čítač nelze vkládat, pouze inkrementovat.

Cassandra TTL (Time to Live) pomocí automatického vypršení platnosti dat

Cassandra poskytuje funkcionalitu, pomocí které mohou data automaticky vypršet.

Během vkládání dat musíte zadat hodnotu 'ttl' v sekundách. Hodnota 'ttl' je hodnota doby do života dat. Po uplynutí této doby budou data automaticky odstraněna.

Například během vkládání zadejte hodnotu ttl 100 sekund. Data budou automaticky vymazána po 100 sekundách. Když vyprší platnost dat, jsou tato data označena náhrobkem.

Náhrobek existuje po dobu odkladu. Po vypršení platnosti dat jsou data po procesu zhutnění automaticky odstraněna.

Syntax

INSERT INTO KeyspaceName.TableName (ColumnNames)
VALUES (ColumnValues)
USING TTL TimeInSeconds;

Příklad

Zde je snímek, kde se vkládají data do studentské tabulky s hodnotou ttl 100 sekund.

Cassandra TTL pomocí automatického vypršení platnosti dat

INSERT INTO University.Student (rollno, name, dept, semester)
VALUES (3, 'Guru99', 'CS', 7) USING TTL 100;

Zde je snímek, kde platnost dat automaticky vyprší po 100 sekundách a data jsou automaticky odstraněna.

Cassandra TTL pomocí automatického vypršení platnosti dat

Kontrola a změna TTL u existujících dat

Jakmile hodnota nese TTL, jsou užitečné další tři operace a každá z nich má chování, které překvapí nováčky.

Zbývající dobu platnosti libovolného sloupce, který není primárním klíčem, lze přečíst pomocí funkce TTL.

SELECT name, TTL(name) FROM University.Student WHERE rollno = 3;

Nulový výsledek znamená, že sloupec nemá nastavenou platnost. Sloupce primárního klíče nelze tímto způsobem dotazovat, protože hodnota TTL se připojuje k hodnotám, nikoli ke klíči.

Existující hodnotě lze přiřadit nový TTL její aktualizací, čímž se odpočítávání od daného okamžiku vynuluje.

UPDATE University.Student USING TTL 600
SET name = 'Guru99' WHERE rollno = 3;

Výchozí nastavení pro celou tabulku zabraňuje opakování klauzule v každém příkazu.

ALTER TABLE University.Student WITH default_time_to_live = 86400;

Z toho plynou dva důsledky. Zaprvé, TTL se vztahuje na sloupec, nikoli na řádek, takže aktualizace jednoho sloupce bez hodnoty TTL ponechá tento sloupec po vypršení platnosti ostatních sloupců, čímž vznikne částečně naplněný řádek. Nastavením hodnoty TTL na celý vložený řádek se tomu zabrání. Zadruhé, každá platnost vyprší, takže tabulka, kde miliony řádků vyprší současně, zpomalí čtení, dokud je komprimace nevymaže. Použití metody TimeWindowCompactionStrategy pro takové tabulky umožňuje odstranit celé tabulky SSTable najednou, nikoliv řádek po řádku.

Platnost vypršení lze také použít na prvky uvnitř kolekce, což je popsáno v Cassandra kolekce výukový program.

Nejčastější dotazy

Ne. TTL se připojuje k neklíčovým hodnotám. Řádek zmizí pouze po vypršení platnosti všech neklíčových sloupců, takže nastavení TTL na celou vloženou hodnotu je spolehlivý přístup.

Strop je 630 720 000 sekund, dvacet let. Hodnoty nad touto hranicí jsou odmítnuty, takže delší uchování musí být řešeno úlohou čištění na úrovni aplikace.

Zmrazte ji, když je celá hodnota vždy zapsána společně nebo když je součástí primárního klíče. Zmrazená kolekce nemůže mít aktualizované jednotlivé prvky.

V zřejmých případech obvykle ano, ale běžně se doporučuje double pro money a uuid tam, kde je pro seřazení potřeba timeuuid. Ručně zkontrolujte číselnou přesnost a volby pro seřazení podle času.

Dokáže převést zásady uchovávání na hodnoty TTL a doporučit strategii komprimace. Nejprve ověřte zákonnou dobu uchovávání, protože data s vypršenou platností nelze obnovit.

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