YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

Transcript
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Ä?


Related Documents