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.
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.
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.
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.



