The Bad : Osiointi
yksi kova asioita tottua aluksi on, että ilman indeksit kyselyt että span rivit voi (hyvin) olla huono. Muistellen meidän varastointi malli kuitenkin, että ei ole yllättävää. Strategiaa, jolla Cassandra jakaa rivit isännille, kutsutaan Osioinniksi.
osiointi on teko veistämällä jopa valikoima rowkeys antaa ne ”token ring”, joka myös antaa vastuun segmentin (eli osio) rowkey range kullekin isännälle. Olet luultavasti nähnyt tämän, kun alustit klusterin ”token”. Token antaa isännälle sijainnin token Ringin varrella, joka antaa vastuun token Rangen osasta. Osiointi on teko kartoitus rowkey osaksi token alue.
on olemassa kaksi ensisijaista partioijaa: Satunnainen ja järjestyksen säilyttäminen. Ne on nimetty sopivasti. Randompartioner yhdistää rowkeysit poleteiksi. Randompartitionerilla poletti on rowkeyn hasis. Tämä tekee hyvää työtä jakaa tasaisesti tietoja eri solmuja, mutta tekee kyselyt eri rowkey tilaa uskomattoman vaikeaa. Vain ”start rowkey” – arvosta ja” end rowkey ” – arvosta Cassandra ei voi määrittää, mitä tilaa tarvitset. Sen on pohjimmiltaan suoritettava ” taulukon skannaus ”vastatakseen kyselyyn, ja” taulukon skannaus ” Cassandrassa on huono, koska sen on mentävä jokaiseen koneeseen (todennäköisesti kaikki koneet, jos sinulla on hyvä hajautustoiminto) vastaamaan kyselyyn.
The Good: Secondary Indexes
Cassandra does provide a native indexing mechanism in Secondary Indexes. Toissijaiset indeksit toimivat sarakkeiden arvoista. Ilmoitat sivuhakemiston sarakkeen perheeseen. Datastaxilla on hyvä dokumentaatio käytöstä. Hupun alla Cassandra ylläpitää indeksinä ”piilopalstaperhettä”. (Katso ed Anuffin esitys yksityiskohtien osalta) koska Cassandra ei säilytä sarakkeen arvotietoja yhdessäkään solmussa, ja toissijaiset indeksit ovat sarakkeiden arvolla (eikä rowkeys), kysely on silti lähetettävä kaikkiin solmuihin. Lisäksi toissijaisia indeksejä ei suositella korkean kardinaalisuuden sarjoille. En ole vielä etsinyt, mutta oletan, että tämä johtuu tietomallista, jota käytetään ”piilotetun sarakkeen perheessä”. Jos piilotettu sarakkeen perhe tallentaa rivin kutakin yksittäistä arvoa kohti (rowkeys sarakkeina), se merkitsisi rivien skannaamista sen määrittämiseksi, ovatko ne kyselyn alueella.
ED: n esityksestä:
- ei suositella korkeille kardinaaliarvoille (esim.aikaleimat,syntymäpäivät,avainsanat jne.)
- vaatii vähintään yhden tasa-arvovertailun kyselyssä–ei suuri alle / suurempi-kuin / vaihteluväli-kyselyissä
- Lajittelemattomat-tulokset ovat token-järjestyksessä, ei kyselyarvon järjestyksessä
- rajoitettu datatyyppien hakuun, Cassandra ymmärtää natiivisti
kaiken tämän sanottua, toissijaiset indeksit toimivat laatikosta ja meillä on ollut hyvä menestys käyttämällä niitä yksinkertaisia arvoja.
The Ugly: tee-se-itse (DIY) / Wide-Rows
kauneus on katsojan silmässä. Yksi NoSQL: n kauniista puolista on yksinkertaisuus. Konstruktiot ovat yksinkertaisia: avainpaikat, Pylväsperheet, rivit ja sarakkeet. Pitää se yksinkertainen kuitenkin tarkoittaa joskus sinun täytyy ottaa asioita omiin käsiinsä.
tämä pätee leveärivisiin indekseihin. Cassandran tallennusmallia hyödyntäen on helppo rakentaa omat indeksit, joissa jokainen rivinäppäin muuttuu indeksin sarakkeeksi. Tämä on joskus vaikea saada pään noin, mutta kuvitellaan meillä on tapaus, jossa haluamme valita kaikki käyttäjät Postinumeron. Pääkäyttäjien sarakeperhe on näppäilty käyttäjätunnuksella, postinumero on sarake jokaisella käyttäjärivillä. Voisimme käyttää toissijaisia indeksejä, mutta postinumeroita on paljon. Sen sijaan voisimme ylläpitää sarakeperhettä, jossa on yksi rivi nimeltään ”idx_zipcode”. Voisimme sitten kirjoittaa sarakkeita tähän riviin muodossa ”zipcode_userid”. Koska sarakkeet tallennetaan lajiteltuun järjestykseen, on nopeaa kysellä kaikki sarakkeet, jotka alkavat ”18964”: lla (esimerkiksi voisimme käyttää 18964_ ja 18964_zzzzzz alku-ja loppuarvoina).
yksi ilmeinen haittapuoli tässä lähestymistavassa on, että rivit ovat itsenäisiä isäntä. (jälleen paitsi jäljennöksiä) tämä tarkoittaa, että kaikki kyselyt tulevat osumaan yhteen solmuun. En ole vielä löytänyt tähän hyvää vastausta.