NOSQL

6,398 views

Published on

Il database relazionale va in pensione, avanza il movimento NOSQL

Published in: Technology

NOSQL

  1. 1. Giovedì, 17 maggio 2012 Speaker: Manuel Scapolan NOSQL Il database relazionale va in pensione, avanza il movimento NOSQLRavenDB, database non relazionale,rappresentante del movimento NOSQL
  2. 2. Il mondo è cambiato troppo in fretta … + + + =
  3. 3. Per superare questamontagna di dati era necessario scalareorizzontalmente, ovvero fare scale out,cosa che però gli attualiRDBMS non sapevano fare molto bene …
  4. 4. Per risolvere il problema Amazon e Google hanno deciso di implementare internamente delle soluzioni che avessero come caratteristica principale la scalabilità orizzontale Le implementazioni dei due giganti del web hanno dato il via ad un piccolo esercito di database “alternativi” (chiamati poi NOSQL)BigTable: http://research.google.com/archive/bigtable.htmlDynamo: http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html
  5. 5. Per definirsi tale, un database NOSQL deve essere: Non relazionale Inteso come modello di trattamento del dato Supporto? Distribuito Open-sourceScalabile orizzontalmente Deve essere scalabile “by design”In accordo con la definizione data su http://nosql-database.org/
  6. 6. Classificazione I database NOSQL sono classificati in base al tipo di modello che utilizzano per la memorizzazione del dato, in particolare possiamo individuare queste grandi famiglie: Key-Value stores Column-oriented databases Document databases Graph databasesFonte: http://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/
  7. 7. VoldemortKey/Value stores memcached Tokyo cabinetSono definiti da un semplice dizionario/mappa che permetteall’utente di recuperare e aggiornare il valore memorizzatodata la sua chiave stringa BLOB• Get(key)• Set(key, value)• Delete(key)… e poco altro
  8. 8. Caso d’uso: memcachedUtilizzare memcached per alleggerire il carico sul databaserelazionale ed avere una cache scalabile e indipendente dalprocesso ASP.NET Qui posso fare scale-out Qui posso fare “solo” scale-up
  9. 9. Caso d’uso: memcachedUtilizzare memcached per alleggerire il carico sul database Facebooks fork ofrelazionale ed avere una cache scalabile e indipendente dal memcached canprocesso ASP.NET do ~200k QPS Qui posso fare scale-out Qui posso fare 1 Se non trovo il valore lo recupero “solo” scale-up dal database (2) 2 Con l’aiuto di memcached posso fare scale-out anche con i dati, ma in memoria
  10. 10. MongoDBDocument databases RavenDB CouchDBMemorizza le informazioni come collezioni di documenti.Un documento può contenere informazioni annidate edha un formato riconosciuto (JSON, XML, etc.) chepermette poi al server di eseguire delle query sui dati.A differenza delle tabelle di un relazionale però èschema-free nel senso che non deve sottostare ad unoschema ben preciso.Posso avere documenti di una stessa tipologia con campidiversi e posso aggiungere nuovi campi senzacompromettere i documenti esistenti.
  11. 11. Allegro GraphGraph databases Sones Neo4j FlockDBRappresentano perfettamente una realtà compostada una fitta rete di connessioni e la modellanosotto forma di nodi e rami di un grafo.Ai nodi come ai singoli rami vengono associate leinformazioni attraverso Key-Value store.Se togliamo le relazioni (i rami) assomigliano atutti gli effetti ad un database documentale. recommendsPer le query che soddisfano il modello gerarchico itempi di esecuzione possono essere 1.000 voltepiù veloci rispetto agli altri database.
  12. 12. Amazon SimpleDBColumn-oriented Cassandra Hypertabledatabases Hadoop / HBaseLe informazioni non sono memorizzate per riga bensì per colonna.L’ovvietà dell’affermazione si può spiegare meglio con un esempio: Row-oriented Column-oriented 1,Smith,Joe,40000; 1,2,3; 2,Jones,Mary,50000; Smith,Jones,Johnson; 3,Johnson,Cathy,44000; Joe,Mary,Cathy; 40000,50000,44000;
  13. 13. Il mantra dei database NOSQL:
  14. 14. DEMO 1 Installazione di RavenDB, configurazione e operazioni di lettura e scritturaE’ un database documentale
  15. 15. RavenDBin deep
  16. 16. Schema-freeLe informazioni sono memorizzate in JSON e non devono sottostaread uno schema, quindi posso arbitrariamente decidere di aggiungeresuccessivamente dei campi senza compromettere i dati esistenti.
  17. 17. IndiciSe i documenti che inseriamo non hanno un formato stabilito non abbiamo un modo perpoter recuperare selettivamente le informazioni. RavenDB ci mette a disposizione lapossibilità di creare degli indici con i quali fare le query per recuperare i documenti, unaporzione di essi (proiezione) oppure fare delle aggregazioni.
  18. 18. Come funzionano allora le query?Premessa: tutte le query devono usare un indiceSe non esiste un indice per quella interrogazione RavenDB ne crea uno temporaneo.Se lo chiamo più volte diventa persistente. in Lucene.NETE’ la funzione usata da RavenDB per estrarre le informazioni da memorizzare insieme all’indice.Quando chiamo la query le informazioni precedentemente memorizzate mi vengono ritornatecome risultato.
  19. 19. Informazioni stalenessSiccome l’elaborazione di un indice è molto pesante non viene fatta nello stesso momentodella query, ma viene fatta in un thread in background che parte quando viene aggiuntoun nuovo dato oppure ne viene modificato uno esistente.Questo comportamento ha due immediate conseguenze:• Le query sono molto veloci• Le query possono ritornare dati non aggiornati (staleness)Posso sempre verificare se il risultato della query ha tornato dati non aggiornati:oppure posso specificare alla query quanto può attendere (oppure fino a quando attendere):
  20. 20. Ci consente diMap/Reduce fare delle aggregazioniLa Map/Reduce non è altro che un group by applicato ad un elevato numero di datidistribuiti. La sua applicazione è giustificata dal fatto che abbiamo la necessità di eseguireun group by in più step ognuno dei quali da eseguire su macchine differenti.
  21. 21. Map/ReduceIl primo passo è quello di separare l’operazione precedente in più operazioni distinte. MAP FUNCTION Subset di risultati che diventerà uno degli input della reduce
  22. 22. Map/ReduceIl passo successivo riguarda l’esecuzione del group by sui risultati della map function. REDUCE FUNCTIONIl risultato:
  23. 23. Indice Map/ReduceOvviamente il passo conclusivo è quello di creare un indice map/reduce che ci permetta difare query di aggregazione sui dati:Ed ecco come poi faccio la query su questo indice:
  24. 24. DEMO 2Creiamo il nostro primo indice Map/Reduce
  25. 25. DDD (Domain Driven Design)RavenDB, come tutti gli altri databasedocumentali, si sposa perfettamente con lametodologia del Domain Driven Design in quantoassume che l’informazione minima da salvare,ovvero il documento, rappresenti un aggregato.L’aggregato è una unità logica indipendente checontiene tutte le informazioni necessarie perdefinire un contesto applicativo.Ad esempio il singolo post con l’autore, icommenti, le categorie e i tag. No Impedance Mismatch! ORM
  26. 26. Nessuna Join, la regola èdenormalizzareDDD tutta la vita, ma mi stai forse dicendo che lo stesso autoredevo salvarlo in ogni documento che contiene un suo post?Esatto! Nell’aggregato devo mettere solo una versione denormalizzatache contenga per quanto possibile solo le informazioni strettamentenecessarie che verranno modificate raramente.Ma così ho una forte duplicazione dei dati, e se poi miservirà fare un update?
  27. 27. CAP Theorem Devi scegliere tra consistenza e disponibilità del dato
  28. 28. ACID vs BASE Atomicity, Basic Available, Consistency, Soft-state, Isolation, Eventual Durability consistencyMantengo l’integrità e la consistenza del dato Favorisco la replicazione per aumentare la garantendo transazionalità a scapito delle scalabilità orizzontale e la disponibilità del performance e della scalabilità orizzontale dato a scapito della consistenza
  29. 29. Come scegliere il database “giusto”?La scelta deve essere guidata da:• Tipo di dati da memorizzare• Richieste in termini di scalabilità• Natura del tipo di interrogazioni che devo fare sui dati• Esigenze o vincoli in termini di consistenza
  30. 30. Alcune considerazioniNon esiste più un solo modo di pensare altrattamento dei datiSQL e NOSQL possono convivere occupandosi diaspetti diversi ed essere sfruttati al massimo perquelle che sono le loro caratteristiche epeculiarità (polyglot persistance)Alcuni prodotti NOSQL non sono ancora maturiper giustificarne un impiego a livello enterpriseIn alcune circostanze è meglio approfondire glistrumenti in possesso perché potrebbe risiederenella scarsa conoscenza di essi il collo di bottigliache stiamo cercando di superare
  31. 31. RiferimentiIntroduzione e concetti base NoSQL. Present, Past & Future (Gabriele Lana) NoSQL Databases - Christof Strauch NoSQL Data Modeling Techniques Availability & Consistency Scalable SQL and NoSQL Data Stores - Rick Cattell Highly Connected Data Models in NOSQL StoresCasi d’uso ed esempi What the heck are you actually using NoSQL for? 35+ Use Cases for Choosing Your Next NoSQL Database What Should I Do? Choosing SQL, NoSQL or Both for Scalable Web Applications Social networks in the database: using a graph database Stack Overflow Architecture NOSQL Overview, Neo4j Intro And Production Example (QCon London 2010)
  32. 32. RiferimentiSQL vs NOSQL NoSQL vs. RDBMS: Let the flames begin! Fighting The NoSQL Mindset, Though This Isnt an anti-NoSQL PieceRavenDB RavenDB overview MVC – Get RavenDB up and running in 5 minutes using Ninject RavenDB Documentation Using RavenDB and ASP.NET MVC 4 to create a Twitter Clone Chirpy Document Databases Compared: CouchDB, MongoDB, RavenDBHumor MongoDB vs MySQL Your Guide to No-SQL - Brian Aker
  33. 33. CreditsLe immagini contenute in questa presentazione hannolicenza Creative CommonsSlide 1:http://www.flickr.com/photos/32931740@N06/4640796393/Slide 3:http://www.flickr.com/photos/x1brett/6069486112/Slide 4:http://www.flickr.com/photos/55497864@N00/4742540168/Slide 5:http://www.flickr.com/photos/11357767@N00/7096393207/Slide 6: http://www.flickr.com/photos/32066106@N06/4192572579/Slide 7: http://www.flickr.com/photos/7205246@N02/6890042407/Slide 8: http://www.flickr.com/photos/hikingartist/4192577791/in/photostream/Slide 18: http://www.flickr.com/photos/32066106@N06/4193330368/Slide 20: http://www.flickr.com/photos/32066106@N06/3554539705/Slide 33:http://www.flickr.com/photos/hikingartist/4193330034/in/photostream/
  34. 34. Thank You MANUEL SCAPOLAN website: www.manuelscapolan.it twitter: manuelscapolan e-mail: info@manuelscapolan.it

×