Yleistä

Cassandra on alkujaan Facebookin kehittämä avoimen lähdekoodin NoSQL-tietokanta, joka on avain/arvopareihin perustuvan ja perinteisen taulukkomuotoisen tietokannan välimuoto. Se on suunniteltu erittäin suurien tietomäärien käsittelyyn, jotka on hajautettu useille erillisille palvelimille. Nykyisen Cassandran ylläpidosta ja kehityksestä vastaa Apache Software Foundation.

Tietomalli

Cassandran tietomalli koostuu sarakkeista (column), riveistä (row), sarakeryhmistä (column family) ja tiloista (key space). Käytännössä Cassandran tietomalli voidaan nähdä moniulotteisena assosiatiivisena taulukkona. Kyselyiden tekoon käytetään SQL:ää muistuttavaa CQL (Cassanda Query Language) -kyselykieltä. Kuvassa 1 on esitetty Cassandran tietomalli.


Kuva 1. Cassandran tietomalli.

Suhde relaatiokantoihin

Sarakeryhmissä sijaitseva tieto on tallennettu kaksiulotteiseen assosiatiiviseen taulukkoon, jonka sisältämiin yksittäisiin tietoihin päästään käsiksi rivin ja sarakkeen nimen kautta. Tässä suhteessa perinteinen relaatiotietokanta ja Cassandra toimivat samalla periaatteella, mutta monilla muissa osa-alueilla on useita merkittäviä eroavaisuuksia.

Arkkitehtuuri

Cassandra on hajautettu järjestelmä ja sen arkkitehtuuri on esitetty kuvassa 2.

Kuva 2. Cassandran arkkitehtuuri.

Cassandra klusteri koostuu useista erillisistä solmuista (node), joiden välille järjestelmään tallennettu tieto on hajautetettu. Tietojen hajauttamisessa käytetään hyväksi tallennavan tiedon avaimesta laskettavaa tiivistearvoa. Klusterin solmut tallentavat kukin määrätyn alueen järjestelmän tiivistearvoavaruudesta, joten tiivistearvon perusteella tiedetään mihin solmuun tieto on tallennettu. Käytännössä tiedon hajauttaminen ei kuitenkaan näy käyttäjälle millään tavalla, sillä yksittäisen tiedon käsitteleminen onnistuu minkä tahansa klusteriin kuuluvan solmun kautta, sillä solmut osaavat reitittää pyynnöt eteenpäin sille solmulle, jonne käsiteltävä tieto on tallennettu.

Cassandra mahdollistaa tietojen replikoinnin useille eri palvelimille sijoitetuille solmuille, joka parantaa järjestelmän vikasietoisuutta ja luotettavuutta huomattavasti. Lisäksi myös solmujen kyky reitittää pyyntöjä eteenpäin parantaa osaltaan luotettavuutta merkittävästi, sillä järjestelmä ei kaadu yksittäisten solmujen vikaantumiseen. Vikaantuneet solmut pystytään myös vaihtamaan lennossa sekä uusia solmuja lisäämään klusteriin ilman järjestelmän alasajoa tai uudelleenkäynnistämistä. Järjestelmä on myös hyvin skaalautuva, sillä sekä luku- että kirjoitusoperaatioiden nopeus kasvaa lineaarisesti uuden palvelinkapasiteetin lisäämisen myötä.