Bazy danych NoSQL Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Poznań, 29.10.2012 Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 1 / 45
Plan prezentacji 1 Definicja 2 Motywacje 3 Klasyfikacja NoSQL 4 Amazon Dynamo Przeznaczenie Realizacja 5 Cassandra Przeznaczenie Rozpraszanie API 6 RavenDB Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 2 / 45
RDBMS Relacyjne systemy zarządzania bazami danych: relacyjny model danych Edgar Codd (IBM) 1970 język SQL transakcje ACID Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 3 / 45
Model relacyjny Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 4 / 45
ACID Atomicity (atomowość) Consistency (spójność) Isolation (izolacja) Durability (trwałość) Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 5 / 45
Definicja NoSQL Wikipedia: NoSQL jest klasą systemów zarządzania bazą danych nie pasujących do powszechnie stosowanego modelu relacyjnych baz danych: brak języka SQL (w szczególności brak operacji JOIN) nierelacyjny model danych nie musi zapewniać ACID rozproszona, odporna na awarie architektura Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 6 / 45
Wydajność atomowość spójność izolacja trwałość Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 7 / 45
Skalowalność Możliwość zwiększania wydajności systemu wraz z rosnącym zapotrzebowaniem. skalowanie wertykalne (ang. scale up) skalowanie horyzontalne (ang. scale out) sharding (partycjonowanie poziome) partycjonowanie pionowe repliki do odczytu Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 8 / 45
CAP Theorem (Brewer s conjecture) Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 9 / 45
PACELC Partition yes no Availability Consistency Latency Consistency Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 10 / 45
Alternatywa dla ACID BASE: Basically Available Soft-state Eventual consistency Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 11 / 45
Model danych relacyjny model danych nie zawsze wygodny normalizacja vs. efektywność brakujące dane trudności przy zmianie schematu danych Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 12 / 45
Motywacje Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 13 / 45
Podział ze względu na reprezentację danych klucz-wartość hierarchiczna struktura klucz-wartość ( BigTable-like ) dokumentowe grafowe Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 14 / 45
Bazy klucz-wartość przechowują pary klucz-wartość dostęp do danych jedynie po kluczu przykłady: Berkeley DB Riak Dynamo Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 15 / 45
Bazy z hierarchiczną strukturą klucz-wartość wzorowane na BigTable (Google) każdy wiersz może mieć przyporządkowany inny zestaw kolumn częściowo ustrukturalizowane przykłady: HBase Cassandra SimpleDB row-key1 columnfamily1 supercolumn1 supercolumn2 col1 col2 col1 col3... val1 val2 val3 val4... row-key2 supercolumn1 supercolumn2 columnfamily row1 supercolumn1 row2 column1 column2 supercolumn2 column3 Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 16 / 45
Bazy z hierarchiczną strukturą klucz-wartość Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 17 / 45
Dokumentowe bazy danych przechowuje dokumenty zamiast wierszy/rekordów dokument: wpis w bazie składający się z pól (nazwa-wartość) możliwość odwoływania się po polach nie będących kluczem podstawowym przykłady: CouchDB MongoDB ThruDB { imie: "Jan", nazwisko: "Kowalski", nr_indeksu: 98765, oceny: [5, 4.5, 3, 4] dzienny: true } db.students.find({nazwisko: "Kowalski"}) Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 18 / 45
Grafowe bazy danych węzły, krawędzie (łuki), własności szybki dostęp do powiązanych danych przykłady: HyperGraphDB Neo4J Trinity Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 19 / 45
Amazon Dynamo baza typu klucz-wartość stworzona do zarządzania stanem usług oferowanych przez Amazon: koszyk zakupów: dziesiątki milionów zapytań, do 3 mln transakcji zakupu dziennie sesje klientów: setki tysięcy równoległych sesji inne usługi: katalog produktów, system rekomendacji rozproszona architektura serwery rozproszone po całym świecie spójność ostateczna Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 20 / 45
Cele niezawodność (dostępność) nawet kosztem spójności skalowalność pozioma commodity hardware SLA ograniczenia na czas odpowiedzi Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 21 / 45
Dlaczego nie RDBMS dostęp do danych poprzez klucz podstawowy nie potrzeba modelu relacyjnego brak operacji odwołujących się do kilku elementów nie potrzeba transakcji RDBMS wymaga specjalistów i drogiego sprzętu ograniczona dostępność w przypadku awarii słaba skalowalność pozioma brak wsparcia dla automatycznego partycjonowania Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 22 / 45
Interfejs komunikacja po HTTP operacje: get(key) odsyła wartość oraz kontekst put(key, context, value) Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 23 / 45
Partycjonowanie danych consistent hashing (MD5 128b) Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 24 / 45
Replikacja konfigurowalna liczba replik lista preferencji sloppy quorum Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 25 / 45
Uspójnianie stanu uspójnianie przy odczycie anti-entropy hinted handoff Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 26 / 45
Wielowersyjność obiektów wersja obiektu opisywana przez zegar wektorowy: TS 1 : {(S 1,3), (S 2,5), (S 3,1)} TS 2 : {(S 1,3), (S 2,4), (S 3,2)} TS 3 : {(S 1,3), (S 2,6), (S 3,2)} przechowywanie wersji powstałych współbieżnie do czasu uspójnienia przez klienta przy odczycie klient otrzymuje wszystkie dostępne wersje obiektu zymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 27 / 45
Cassandra hierarchiczna struktura klucz wartość Facebook indeksowanie na potrzeby przeszukiwania skrzynki użytkownika setki milionów użytkowników 600+ rdzeni rozmiar indeksu: 120+ TB open source Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 28 / 45
Struktura danych przestrzeń kluczy (keyspace) rodzina kolumn (column family) zdefiniowane statycznie super kolumny (super columns) kolumny (columns) wiersz (row) pojedynczy element z przypisanymi kolumnami/super-kolumnami row-key columnfamily1 columnfamily1 supercolumn1 supercolumn2 col21 col22 col1 col2 col1 col3... val5 val6 val1 val2 val3 val4... Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 29 / 45
Reprezentacja danych klucz i wartość reprezentowana jako tablica bajtów kolumny i super-kolumny posortowane po nazwach lub czasie modyfikacji indeksowanie kluczy Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 30 / 45
Indeksowanie Adam index_by_users_interactions Marek Kasia... m100 m252 m124 m511 m600... - - - -... Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 31 / 45
Partycjonowanie danych consistent hashing dynamiczne równoważenie obciążenia dwie strategie podziału: random partitioner order preserving partitioner Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 32 / 45
Replikacja możliwość konfigurowania liczby replik strategia rozmieszczania replik: przydział prosty świadoma topologi sieci: rack aware, datacenter aware Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 33 / 45
Kontrola poziomu spójności Zapisy: any one quorum local_quorum each_quorum all Odczyty: one quorum local_quorum each_quorum all Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 34 / 45
Uspójnianie replik uspójnianie przy odczycie anti-entropy hinted handoff Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 35 / 45
Interfejs Thrift RPC framework for cross-language service development wspierane języki: C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml gotowe biblioteki dla wybranych języków programowania Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 36 / 45
Example Code v a r c l i e n t F a c t o r y = new K e y e d C a s s a n d r a C l i e n t F a c t o r y ( new C a s s a n d r a C l i e n t P o o l F a c t o r y ( ). C r e a t e ( ), new K e y e d C a s s a n d r a C l i e n t F a c t o r y. C o n f i g ( ) ) ; v a r c l i e n t = c l i e n t F a c t o r y. Make ( new Endpoint ( " l o c a l h o s t ", 9 1 6 0 ) ) ; v a r k e y s p a c e = c l i e n t. GetKeyspace ( " Keyspace1 " ) ; v a r path = new ColumnPath ( " Standard1 ", n u l l, " g r e e t i n g " ) ; k e y s p a c e. I n s e r t ( "0", path, " H e l l o World! " ) ; Column column = k e y s p a c e. GetColumn ( "0", path ) ; C o n s o l e. W r i t e L i n e ( column. Value ) ; Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 37 / 45
RavenDB dokumentowa JSON schema-less transakcje Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 38 / 45
Skalowalność replikacja sharding Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 39 / 45
Interfejs.NET Client HTTP RESTful API Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 40 / 45
.NET Client Example BlogPost p o s t = new BlogPost ( ) { T i t l e = " H e l l o RavenDB", C a t e g o r y = "RavenDB", Content = " This i s a b l o g about RavenDB", Comments = new BlogComment [ ] { new BlogComment ( ) { T i t l e=" U n r e a l i s t i c ", Content=" example1 " }, new BlogComment ( ) { T i t l e=" Nice ", Content=" example2 "}} } ; s e s s i o n. S t o r e ( p o s t ) ; s e s s i o n. SaveChanges ( ) ; Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 41 / 45
RESTful Example PUT / docs / B l o g P o s t s /1 HTTP/ 1. 1 Accept Encoding : d e f l a t e, g z i p Content Type : a p p l i c a t i o n / j s o n ; c h a r s e t=u t f 8 Host : 1 2 7. 0. 0. 1 : 8 0 8 0 Content Length : 378 { " T i t l e " : " H e l l o RavenDB", " C a t e g o r y " : "RavenDB", " Content " : " This i s a b l o g about RavenDB", "Comments" : [ {" T i t l e " : " U n r e a l i s t i c ", " Content " : " This example i s u n r e a l i s t i c " }, {" T i t l e " : " Nice ", " Content " : " This example i s n i c e "} ] } Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 42 / 45
Bibliografia http://nosql-database.org/ Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 43 / 45
Bibliografia http://nosqltapes.com/ Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 44 / 45
Bibliografia http://nosqlsummer.org/ Szymon Francuzik szymon.francuzik@cs.put.poznan.pl Bazy () danych NoSQL Poznań, 29.10.2012 45 / 45