SlideShare una empresa de Scribd logo
1 de 13
Descargar para leer sin conexión
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Ö
Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014
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Ä?

Más contenido relacionado

Más de VincitOy

Vincit ankkasarjakuva
Vincit ankkasarjakuvaVincit ankkasarjakuva
Vincit ankkasarjakuvaVincitOy
 
Tampere goes agile 2015
Tampere goes agile 2015Tampere goes agile 2015
Tampere goes agile 2015VincitOy
 
Digijytky kunnossapidossa 2015 - Simsotec
Digijytky kunnossapidossa 2015 - SimsotecDigijytky kunnossapidossa 2015 - Simsotec
Digijytky kunnossapidossa 2015 - SimsotecVincitOy
 
Digijytky kunnossapidossa 2015 - M-Files
Digijytky kunnossapidossa 2015 - M-FilesDigijytky kunnossapidossa 2015 - M-Files
Digijytky kunnossapidossa 2015 - M-FilesVincitOy
 
Digijytky kunnossapidossa 2015 - Oliotalo
Digijytky kunnossapidossa 2015 - OliotaloDigijytky kunnossapidossa 2015 - Oliotalo
Digijytky kunnossapidossa 2015 - OliotaloVincitOy
 
Digijytky kunnossapidossa 2015 - Vincit
Digijytky kunnossapidossa 2015 - VincitDigijytky kunnossapidossa 2015 - Vincit
Digijytky kunnossapidossa 2015 - VincitVincitOy
 
Itseohjautuvan organisaation muutos
Itseohjautuvan organisaation muutosItseohjautuvan organisaation muutos
Itseohjautuvan organisaation muutosVincitOy
 
Vincit markkinointi AMKE VIMMA 2.6.2015
Vincit markkinointi AMKE VIMMA 2.6.2015Vincit markkinointi AMKE VIMMA 2.6.2015
Vincit markkinointi AMKE VIMMA 2.6.2015VincitOy
 
Vincit Teatime 2015 - Case Käyttöauto: Google Glass
Vincit Teatime 2015 - Case Käyttöauto: Google GlassVincit Teatime 2015 - Case Käyttöauto: Google Glass
Vincit Teatime 2015 - Case Käyttöauto: Google GlassVincitOy
 
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...VincitOy
 
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...VincitOy
 
Implementation of an intelligent car wash service - Vincit Teatime 2013
Implementation of an intelligent car wash service - Vincit Teatime 2013Implementation of an intelligent car wash service - Vincit Teatime 2013
Implementation of an intelligent car wash service - Vincit Teatime 2013VincitOy
 
Projektipäivät 2014: V-Käyrä & Apgar
Projektipäivät 2014: V-Käyrä & ApgarProjektipäivät 2014: V-Käyrä & Apgar
Projektipäivät 2014: V-Käyrä & ApgarVincitOy
 
Vincit V-Käyrä
Vincit V-KäyräVincit V-Käyrä
Vincit V-KäyräVincitOy
 
Need more speed! Pain of mobile app development. Case: Virittäjät
Need more speed! Pain of mobile app development. Case: VirittäjätNeed more speed! Pain of mobile app development. Case: Virittäjät
Need more speed! Pain of mobile app development. Case: VirittäjätVincitOy
 
Trello projektinhallinnan työkaluna
Trello projektinhallinnan työkalunaTrello projektinhallinnan työkaluna
Trello projektinhallinnan työkalunaVincitOy
 
Avaus - Vincit Teatime 2014
Avaus - Vincit Teatime 2014Avaus - Vincit Teatime 2014
Avaus - Vincit Teatime 2014VincitOy
 
Kannattaako graafikko pitää leivässä? - Vincit Teatime 2014
Kannattaako graafikko pitää leivässä? - Vincit Teatime 2014Kannattaako graafikko pitää leivässä? - Vincit Teatime 2014
Kannattaako graafikko pitää leivässä? - Vincit Teatime 2014VincitOy
 
Node.js – mikä ja miksi - Vincit Teatime 2014
Node.js – mikä ja miksi - Vincit Teatime 2014Node.js – mikä ja miksi - Vincit Teatime 2014
Node.js – mikä ja miksi - Vincit Teatime 2014VincitOy
 
Tampere Goes Agile 2013 - Managing a Clean Codebase
Tampere Goes Agile 2013 - Managing a Clean CodebaseTampere Goes Agile 2013 - Managing a Clean Codebase
Tampere Goes Agile 2013 - Managing a Clean CodebaseVincitOy
 

Más de VincitOy (20)

Vincit ankkasarjakuva
Vincit ankkasarjakuvaVincit ankkasarjakuva
Vincit ankkasarjakuva
 
Tampere goes agile 2015
Tampere goes agile 2015Tampere goes agile 2015
Tampere goes agile 2015
 
Digijytky kunnossapidossa 2015 - Simsotec
Digijytky kunnossapidossa 2015 - SimsotecDigijytky kunnossapidossa 2015 - Simsotec
Digijytky kunnossapidossa 2015 - Simsotec
 
Digijytky kunnossapidossa 2015 - M-Files
Digijytky kunnossapidossa 2015 - M-FilesDigijytky kunnossapidossa 2015 - M-Files
Digijytky kunnossapidossa 2015 - M-Files
 
Digijytky kunnossapidossa 2015 - Oliotalo
Digijytky kunnossapidossa 2015 - OliotaloDigijytky kunnossapidossa 2015 - Oliotalo
Digijytky kunnossapidossa 2015 - Oliotalo
 
Digijytky kunnossapidossa 2015 - Vincit
Digijytky kunnossapidossa 2015 - VincitDigijytky kunnossapidossa 2015 - Vincit
Digijytky kunnossapidossa 2015 - Vincit
 
Itseohjautuvan organisaation muutos
Itseohjautuvan organisaation muutosItseohjautuvan organisaation muutos
Itseohjautuvan organisaation muutos
 
Vincit markkinointi AMKE VIMMA 2.6.2015
Vincit markkinointi AMKE VIMMA 2.6.2015Vincit markkinointi AMKE VIMMA 2.6.2015
Vincit markkinointi AMKE VIMMA 2.6.2015
 
Vincit Teatime 2015 - Case Käyttöauto: Google Glass
Vincit Teatime 2015 - Case Käyttöauto: Google GlassVincit Teatime 2015 - Case Käyttöauto: Google Glass
Vincit Teatime 2015 - Case Käyttöauto: Google Glass
 
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
 
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
 
Implementation of an intelligent car wash service - Vincit Teatime 2013
Implementation of an intelligent car wash service - Vincit Teatime 2013Implementation of an intelligent car wash service - Vincit Teatime 2013
Implementation of an intelligent car wash service - Vincit Teatime 2013
 
Projektipäivät 2014: V-Käyrä & Apgar
Projektipäivät 2014: V-Käyrä & ApgarProjektipäivät 2014: V-Käyrä & Apgar
Projektipäivät 2014: V-Käyrä & Apgar
 
Vincit V-Käyrä
Vincit V-KäyräVincit V-Käyrä
Vincit V-Käyrä
 
Need more speed! Pain of mobile app development. Case: Virittäjät
Need more speed! Pain of mobile app development. Case: VirittäjätNeed more speed! Pain of mobile app development. Case: Virittäjät
Need more speed! Pain of mobile app development. Case: Virittäjät
 
Trello projektinhallinnan työkaluna
Trello projektinhallinnan työkalunaTrello projektinhallinnan työkaluna
Trello projektinhallinnan työkaluna
 
Avaus - Vincit Teatime 2014
Avaus - Vincit Teatime 2014Avaus - Vincit Teatime 2014
Avaus - Vincit Teatime 2014
 
Kannattaako graafikko pitää leivässä? - Vincit Teatime 2014
Kannattaako graafikko pitää leivässä? - Vincit Teatime 2014Kannattaako graafikko pitää leivässä? - Vincit Teatime 2014
Kannattaako graafikko pitää leivässä? - Vincit Teatime 2014
 
Node.js – mikä ja miksi - Vincit Teatime 2014
Node.js – mikä ja miksi - Vincit Teatime 2014Node.js – mikä ja miksi - Vincit Teatime 2014
Node.js – mikä ja miksi - Vincit Teatime 2014
 
Tampere Goes Agile 2013 - Managing a Clean Codebase
Tampere Goes Agile 2013 - Managing a Clean CodebaseTampere Goes Agile 2013 - Managing a Clean Codebase
Tampere Goes Agile 2013 - Managing a Clean Codebase
 

Kokemuksia Cassandra NoSQL:stä - Vincit Teatime 2014

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