Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

13
NoSQL käytännössä Kyösti Herrala @ Vincit Vincit Teatime 2014

description

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?

Transcript of Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

Page 1: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

NoSQL käytännössä Kyösti Herrala @ Vincit Vincit Teatime 2014

Page 2: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

•  Cassandran avainominaisuudet •  Arkkitehtuuri, tietomallinnus, kyselyt

•  MTV3 2ndScreen mobile backend

•  Kokemukset ja havainnot

SISÄLTÖ

Page 3: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014
Page 4: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

1000 UPDATE / sec 2000 SELECT / sec throw new (Optimistic)LockingFailureException()

SQL VAI JOTAIN MUUTA?

Page 5: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

•  Perinteisten sovellusten haasteet •  Viite-eheys, atomisuus, normalisointi, lukitus

•  Cassandra – pilvipalveluiden ratkaisut •  Skaalautuminen, hajautus, virhesietoisuus •  BigTable tietomalli (2006) Facebook OS fork (2008)

CASSANDRA - MOTIVOINTI

Page 6: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

•  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  

Page 7: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

•  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  

Page 8: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

•  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

Page 9: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

•  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  

Page 10: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

•  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

Page 11: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

•  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

Page 12: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

!!!public static <K, SN, N> !RangeSuperSlicesCounterQuery<K,SN,N> ! createRangeSuperSlicesCounterQuery( !" Keyspace keyspace, !" Serializer<K> keySerializer, !" Serializer<SN> sNameSerializer, !" Serializer<N> nameSerializer) {} !

CASSANDRA – KOKEMUKSET #2 Vaikeaselkoinen koodi (Hector Java API)

Page 13: Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

www.vincit.fi

KYSYMYKSIÄ?