Oletko miettinyt milloin NoSQL-tietokannan valinta on perusteltua? Niin olen minäkin.Alunperin Facebookin tarpeisiin kehitetty Cassandra-tietokanta on kerännyt paljon kehuja mutkattoman skaalautumisen ansiosta. Menestyksen taustalla on joukko poikkeuksellisen innovatiivisia teknisiä ratkaisuja, kuten Gossip-protokolla ja operaatiokohtaiset konsistenssitasot. Esimerkiksi Cassandran tietomallin tai rajapintojen asettamista suunnittelurajoitteista on vähemmin tietoa saatavilla.Yhdistävästä nimityksestä huolimatta erilaiset NoSQL-ratkaisut eroavat kuin yö ja päivä. Tavanomaisesta relaatiomallista luopumista kannattaa harkita vasta kun tuntee riittävän hyvin valitun teknologian tekemät kompromissit.Kerron Vincitin kokemuksista Cassandran onnistuneesta soveltamisesta reaalimaailman ohjelmistoprojektissa. Miten valinta vaikutti projektiin ja mitä jälkikäteen ajatellen olisi voinut tehdä toisin?
6. • Täysin symmetrinen vertaisverkko (P2P)
• Ei keskeistä koordinaattoria
• Gossip-protokolla
• Suorituskyvyn lineaarinen kasvu vs. solmujen lkm.
• Replikointi (kuvassa 3 kpl)
• Sukulaiset
• Amazon SimpleDB
• Amazon DynamoDB
• Apache HBase
CASSANDRA - ARKKITEHTUURI
Kuvan
lähde:
h-p://www.datastax.com/documenta8on/cassandra/2.0/cassandra/architecture/architectureClientRequestsRead_c.html
7. • Tietomalli
• Rivien pääavaimen hajautus
• RandomPartitioner = MD5(key)
• Column oriented store
• Sarakkeita voi olla miljoonia
• Kyselytyypit: SLICE & RANGE
• Rinnakkaisuusmalli
• Lopulta yhtäpitävä (eventual consistency)
• Suorituskyky vs. yhtäpitäväisyys kompromissi
• ConsistencyLevel = { ALL, ONE, ANY }
• Read repair – Write repair
CASSANDRA - AVAINOMINAISUUDET
Kuvan
lähde:
h-p://www.datastax.com/documenta8on/cassandra/2.0/cassandra/architecture/architectureClientRequestsRead_c.html
8. • Liitoskyselyt puuttuvat (join)
• Manuaalinen hankalaa
• Transaktiot puuttuvat = Paxos & Cassandra 2
• Toimintoja on tarkoituksella karsittu
• Aggregoivat kyselyt puuttuvat
• Ei sisäistä Map-Reduce –moottoria
• Ei tarjoa RESTful JSON API
• MongoDB, CouchDB, Elastic Search
• Thrift RPC ja CQL ajuri
CASSANDRA – KOMPROMISSIT
… ja puutteet
9. • Ketkä Facebook-kaverit seuraavat ottelua?
• getFriendsForMatch(matchId,
myFacebookId)
• Tulos löydyttävä samalta riviltä
• Pääavain = myFacebookId
• Sarakkeen nimi sisältää dataa
• Ottelun tunnus
• Päivitys monistaa datan jokaiselle kaverille
TIETOMALLINNUSESIMERKKI
FIN-‐USA
3.3.2013
FIN-‐SWE
5.3.2013
UKR-‐NOR
27.2.2013
Ismo
Seppo,
Ritva,
Esko
Seppo
Seppo
Ismo
Ritva,
Esko
Ismo
10. • Denormalisointi: Miltä haluttu vastaus näyttää?
• Tärkein peruste tietomallin laadinnassa
• Redundanssin välttäminen ei niin olennaista
• Unohda relaatiot: Varsinkin JOIN!
• Datan pääavaimen perusteella samalta riviltä
• Sarakkeet muodostavat ulottuvuuden (Hash-map)
• Hyödynnä sarakeavaruuden järjestys
• Pääavaimen ositus - komposiittirakenne
• Replikointiosuus
• Paikallinenosuus
CASSANDRA - TIETOMALLINNUS
11. • Positiivista - Skaalautuminen ja HA-ratkaisu
• ACID vain siellä missä tarvitaan!
• Ketterässä projektissa
• Denormalisoidun tiedon hyödyntäminen
• Syntyykö tarve kirjoittaa JOIN manuaalisesti?
• Tietomallin migraatio ja kuvaaminen vaikeata
• Aluksi SQL tai hybridi-ratkaisu mahdollinen?
• Vertaistuki vähissä
• Deployment osaaminen – snapshot backup yms.
CASSANDRA – KOKEMUKSET #1