Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014
-
Upload
vincitoy -
Category
Technology
-
view
529 -
download
5
description
Transcript of Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014
NoSQL käytännössä Kyösti Herrala @ Vincit Vincit Teatime 2014
• Cassandran avainominaisuudet • Arkkitehtuuri, tietomallinnus, kyselyt
• MTV3 2ndScreen mobile backend
• Kokemukset ja havainnot
SISÄLTÖ
1000 UPDATE / sec 2000 SELECT / sec throw new (Optimistic)LockingFailureException()
SQL VAI JOTAIN MUUTA?
• Perinteisten sovellusten haasteet • Viite-eheys, atomisuus, normalisointi, lukitus
• Cassandra – pilvipalveluiden ratkaisut • Skaalautuminen, hajautus, virhesietoisuus • BigTable tietomalli (2006) Facebook OS fork (2008)
CASSANDRA - MOTIVOINTI
• 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
• 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
• 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
• 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
• 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
• 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
!!!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)
www.vincit.fi
KYSYMYKSIÄ?