Cassandra TTL & Cassandra CQL-tietotyypit (esimerkki)

⚡ Älykäs yhteenveto

Cassandra Tietotyypit määrittelevät, mitä kukin sarake voi sisältää, ja TTL ohjaa sitä, kuinka kauan arvo säilyy ennen kuin se vanhenee automaattisesti. Tällä sivulla luetellaan kaikki CQL-tyypit, selitetään vanhenemismekanismi ja käsitellään vanhenemista seuraavaa hautakivi-toimintoa.

  • 🔤 Tyyppiperheet: CQL ryhmittelee tyypit teksti-, numero-, päivämäärä- ja aika-, tunniste- ja kokoelmakategorioihin.
  • 🔢 Numeerinen valinta: tinyint - varint kattavat jokaisen kokonaisluvun leveyden, kun taas desimaalit säilyttävät tarkan tarkkuuden rahalle.
  • 🆔 UUID vs. aikaUUID: timeuuid sisältää aikaleiman ja lajittelee tiedot aikajärjestykseen, joten se sopii aikajärjestyksessä oleviin klusterointisarakkeisiin.
  • TTL-perusteet: Lisäyshetkellä asetettu ttl-arvo sekunteina poistaa tiedot automaattisesti sen kuluttua.
  • 🪦 Vanhenemiskäyttäytyminen: Vanhentuneesta datasta tulee hautakivi, ja se poistetaan fyysisesti vasta pakkauksen jälkeen.
  • 🧊 Jäädytetyt tyypit: Kokoelman tai tuplen merkitseminen jäädytetyksi tallentaa sen yhtenä muuttumattomana arvona, joka on korvattava kokonaisena.

Cassandra TTL CQL -tietotyypit

Cassandra Tietotyypit

Cassandra tukee erityyppisiä tietotyyppejä. Tässä on taulukko, joka näyttää tietotyypit, niiden vakiot ja kuvauksen.

CQL-tyyppi vakiot Tuotetiedot
ASCII Jouset US-Ascii-merkkijono
bigint kokonaisluvut 64-bittinen allekirjoitettu pitkä
möykky läiskä Mielivaltaiset tavut heksadesimaalimuodossa
boolean booleans Totta vai tarua
torjua kokonaisluvut Hajautetut laskuriarvot 64 bittiä
data Kokonaisluvut, merkkijonot Kalenteripäivämäärä ilman aikakomponenttia
desimaalin Kokonaisluvut, kellukkeet Muuttuva tarkkuus desimaali
kaksinkertainen Kokonaisluvut, kellukkeet 64-bittinen liukuluku
kesto Kesto Kuukausien, päivien ja nanosekuntien aikajänne
kellua Kokonaisluvut, kellukkeet 32-bittinen liukuluku
jäädytetty Tuples, kokoelmat, käyttäjän määrittämät tyypit Tallentaa moniosaisen arvon yhdeksi muuttumattomaksi blobiksi
inet Jouset IP-osoite IPv4- tai IPv6-muodossa
int kokonaisluvut 32-bittinen etumerkillinen kokonaisluku
lista Järjestetty elementtikokoelma
kartta JSON-tyylinen avain- ja arvoparien kokoelma
setti Järjestämätön kokoelma ainutlaatuisia elementtejä
pieni kokonaisluvut 16-bittinen etumerkillinen kokonaisluku
teksti Jouset UTF-8-koodattu merkkijono
aika Kokonaisluvut, merkkijonot Kellonaika nanosekunnin tarkkuudella
aikaleima Kokonaisluvut, merkkijonot Päivämäärä ja aika, koodattu millisekunteina epookista lähtien
aikauuid UUID: t Tyypin 1 UUID, lajiteltavissa upotetun ajan mukaan
pikkuinen kokonaisluvut 8-bittinen etumerkillinen kokonaisluku
monikko Kiinteä ryhmä tyypitettyjä kenttiä
uuid UUID: t Standardi UUID
Varchar Jouset UTF-8-koodattu merkkijono, tekstin alias
variantti kokonaisluvut Mielivaltainen tarkkuuskokonaisluku

Kolme vaihtoehtoa tuossa luettelossa aiheuttavat eniten mallinnusvirheitä, joten ne kannattaa mainita erikseen.

  • teksti varcharia vastaan. Ne ovat samaa tyyppiä. Kumpikin nimi toimii, eikä niiden sekoittaminen lisää arvoa.
  • aikaleima timeuuid:tä vasten. Käytä aikaleimaa tallentaaksesi, milloin jokin tapahtui. Käytä timeuuid-tunnusta klusterointisarakkeena, kun useat tapahtumat jakavat millisekunnin, koska UUID takaa ainutlaatuisuuden lajitellen silti ajan mukaan.
  • desimaalilukua kaksinkertaista vastaan. Rahamääräiset arvot kuuluvat desimaalijärjestelmään. Tupla-arvo aiheuttaa binäärisen pyöristysvirheen, joka kertyy aggregaatioiden välillä.

A torjua sarakkeella on erityinen rajoitus: taulukossa voi olla laskurisarakkeita tai tavallisia sarakkeita, ei koskaan molempia, eikä laskuririvejä voida lisätä, ainoastaan ​​kasvattaa.

Cassandra TTL (Time to Live) käyttäen automaattista tietojen vanhenemista

Cassandra tarjoaa toiminnon, jonka avulla tiedot voidaan automaattisesti vanhentua.

Tietojen lisäyksen aikana sinun on määritettävä 'ttl'-arvo sekunneissa. ttl-arvo on aika, joka kuluu datan elämiseen. Tietyn ajan kuluttua tiedot poistetaan automaattisesti.

Määritä esimerkiksi ttl-arvo 100 sekuntia lisäyksen aikana. Tiedot poistetaan automaattisesti 100 sekunnin kuluttua. Kun tiedot ovat vanhentuneet, vanhentuneet tiedot on merkitty hautakivellä.

Hautakivi on olemassa armonajan. Kun tiedot ovat vanhentuneet, tiedot poistetaan automaattisesti pakkausprosessin jälkeen.

Syntaksi

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

esimerkki

Tässä on tilannekuva, jossa tietoja lisätään opiskelijataulukkoon ttl-arvon ollessa 100 sekuntia.

Cassandra TTL käyttäen automaattista tietojen vanhenemista

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

Tässä on tilannekuva, jossa tiedot vanhenevat automaattisesti 100 sekunnin kuluttua ja tiedot poistetaan automaattisesti.

Cassandra TTL käyttäen automaattista tietojen vanhenemista

TTL:n tarkistaminen ja muuttaminen olemassa olevissa tiedoissa

Kun arvolla on TTL, on hyödyllisiä kolme lisäoperaatiota, ja jokaisella on käyttäytyminen, joka yllättää aloittelijat.

Minkä tahansa muun kuin ensisijaisen avaimen sarakkeen jäljellä oleva käyttöikä voidaan lukea TTL-funktiolla.

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

Null-tulos tarkoittaa, että sarakkeelle ei ole asetettu vanhenemispäivää. Ensisijaisen avaimen sarakkeita ei voida kysellä tällä tavalla, koska TTL liittyy arvoihin eikä avaimeen.

Olemassa olevalle arvolle voidaan antaa uusi TTL päivittämällä se, mikä nollaa lähtölaskennan kyseisestä hetkestä.

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

Koko taulukon laajuinen oletusarvo välttää lausekkeen toistamisen jokaisessa lausekkeessa.

ALTER TABLE University.Student WITH default_time_to_live = 86400;

Tästä on kaksi seurausta. Ensinnäkin TTL-arvoa sovelletaan sarakkeittain, ei riveittäin, joten yhden sarakkeen päivittäminen ilman TTL-arvoa jättää kyseisen sarakkeen jäljelle muiden vanhenemisen jälkeen, jolloin rivistä tulee osittain täytetty. TTL:n asettaminen koko lisäykselle välttää tämän. Toiseksi jokainen vanheneminen kirjoittaa hautakiven, joten taulukko, jossa miljoonat rivit vanhenevat yhdessä, hidastaa lukemista, kunnes tiivistäminen poistaa ne. TimeWindowCompactionStrategy-ominaisuuden käyttäminen tällaisille taulukoille mahdollistaa kokonaisten SSTable-taulukoiden poistamisen kerralla sen sijaan, että ne tiivistettäisiin rivi riviltä.

Vanhenemista voidaan soveltaa myös kokoelman sisällä oleviin elementteihin, mitä käsitellään kohdassa Cassandra kokoelmat opetusohjelma.

UKK

Ei. TTL liittyy muihin kuin avainarvoihin. Rivi katoaa vasta, kun jokainen muu kuin avainsarake on vanhentunut, joten TTL:n asettaminen koko lisäykselle on luotettava lähestymistapa.

Yläraja on 630 720 000 sekuntia ja kaksikymmentä vuotta. Tätä suuremmat arvot hylätään, joten pidemmät säilytysajat on käsiteltävä sovellustason puhdistustyöllä.

Jäädytä se, kun koko arvo kirjoitetaan aina yhdessä tai kun se muodostaa osan perusavainta. Jäädytetyn kokoelman yksittäisiä elementtejä ei voi päivittää.

Yleensä kyllä ​​ilmeisissä tapauksissa, mutta se ehdottaa yleisesti double-arvoa rahalle ja uuid-arvoa, kun timeuuid-arvoa tarvitaan järjestämistä varten. Tarkista numeerinen tarkkuus ja aikajärjestyksen valinnat manuaalisesti.

Se voi muuntaa säilytyskäytännön TTL-arvoiksi ja suositella tiivistysstrategiaa. Vahvista ensin laillinen säilytysaika, koska vanhentuneita tietoja ei voida palauttaa.

Tiivistä tämä viesti seuraavasti: