bazydanychnosql - cs.put.poznan.pl · planprezentacji 1 definicja 2 motywacje 3 klasyfikacjanosql...
TRANSCRIPT
Bazy danych NoSQL
Szymon [email protected]
Poznań, 29.10.2012
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 1 / 45
Plan prezentacji
1 Definicja
2 Motywacje
3 Klasyfikacja NoSQL
4 Amazon DynamoPrzeznaczenieRealizacja
5 CassandraPrzeznaczenie“Rozpraszanie”API
6 RavenDB
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 2 / 45
RDBMS
Relacyjne systemy zarządzania bazami danych:relacyjny model danych — Edgar Codd (IBM) — 1970język SQLtransakcjeACID
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 3 / 45
Model relacyjny
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 4 / 45
ACID
Atomicity (atomowość)Consistency (spójność)Isolation (izolacja)Durability (trwałość)
Szymon Francuzik [email protected] ()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 powszechniestosowanego modelu relacyjnych baz danych:
brak języka SQL (w szczególności brakoperacji JOIN)nierelacyjny model danychnie musi zapewniać ACIDrozproszona, odporna na awariearchitektura
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 6 / 45
Wydajność
atomowość
spójność
izolacja
trwałość
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 7 / 45
Skalowalność
Możliwość zwiększania wydajności systemu wraz zrosnącym zapotrzebowaniem.
skalowanie wertykalne (ang. scale up)skalowanie horyzontalne (ang. scale out)
I sharding (partycjonowanie poziome)I partycjonowanie pionoweI repliki do odczytu
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 8 / 45
CAP Theorem (Brewer’s conjecture)
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 9 / 45
PACELC
Partition
yes no
Availability Consistency Latency Consistency
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 10 / 45
Alternatywa dla ACID
BASE:Basically AvailableSoft-stateEventual consistency
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 11 / 45
Model danych
relacyjny model danych nie zawsze wygodnyI normalizacja vs. efektywnośćI brakujące dane
trudności przy zmianie schematu danych
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 12 / 45
Motywacje
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 13 / 45
Podział ze względu na reprezentację danych
klucz-wartośćhierarchiczna struktura klucz-wartość (“BigTable-like”)dokumentowegrafowe
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 14 / 45
Bazy klucz-wartość
przechowują pary klucz-wartośćdostęp do danych jedynie po kluczuprzykłady:
I Berkeley DBI RiakI Dynamo
Szymon Francuzik [email protected] ()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 kolumnczęściowo ustrukturalizowaneprzykłady:
I HBaseI CassandraI SimpleDB
columnfamily1
row-key1supercolumn1 supercolumn2col1 col2 col1 col3 ...val1 val2 val3 val4 ...
row-key2 supercolumn1 supercolumn2
columnfamily
row1
row2
supercolumn1
supercolumn2
column1
column2
column3
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 16 / 45
Bazy z hierarchiczną strukturą klucz-wartość
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 17 / 45
Dokumentowe bazy danych
przechowuje dokumenty zamiastwierszy/rekordówdokument: wpis w bazieskładający się z pól(nazwa-wartość)możliwość odwoływania się popolach nie będących kluczempodstawowymprzykłady:
I CouchDBI MongoDBI ThruDB
{ imie: "Jan",
nazwisko: "Kowalski",
nr_indeksu: 98765,
oceny: [5, 4.5, 3, 4]
dzienny: true }
db.students.find({nazwisko:
"Kowalski"})
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 18 / 45
Grafowe bazy danych
węzły, krawędzie (łuki), własnościszybki dostęp do powiązanych danychprzykłady:
I HyperGraphDBI Neo4JI Trinity
Szymon Francuzik [email protected] ()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:
I koszyk zakupów: dziesiątki milionów zapytań, do 3 mln transakcjizakupu dziennie
I sesje klientów: setki tysięcy równoległych sesjiI inne usługi: katalog produktów, system rekomendacji
rozproszona architektura — serwery rozproszone po całym świeciespójność ostateczna
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 20 / 45
Cele
niezawodność (dostępność) — nawet kosztem spójnościskalowalność pozioma — commodity hardwareSLA — ograniczenia na czas odpowiedzi
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 21 / 45
Dlaczego nie RDBMS
dostęp do danych poprzez klucz podstawowy — nie potrzeba modelurelacyjnegobrak operacji odwołujących się do kilku elementów — nie potrzebatransakcjiRDBMS wymaga specjalistów i drogiego sprzętuograniczona dostępność w przypadku awariisłaba skalowalność pozioma — brak wsparcia dla automatycznegopartycjonowania
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 22 / 45
Interfejs
komunikacja po HTTPoperacje:
I get(key) — odsyła wartość oraz kontekstI put(key, context, value)
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 23 / 45
Partycjonowanie danych
consistent hashing (MD5 128b)
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 24 / 45
Replikacja
konfigurowalna liczba repliklista preferencjisloppy quorum
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 25 / 45
Uspójnianie stanu
uspójnianie przy odczycieanti-entropyhinted handoff
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 26 / 45
Wielowersyjność obiektów
wersja obiektu opisywana przez zegarwektorowy:TS1 : {(S1,3), (S2,5), (S3,1)}TS2 : {(S1,3), (S2,4), (S3,2)}TS3 : {(S1,3), (S2,6), (S3,2)}przechowywanie wersji powstałychwspółbieżnie do czasu uspójnienia przezklientaprzy odczycie klient otrzymuje wszystkiedostępne wersje obiektu
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 27 / 45
Cassandra
hierarchiczna struktura klucz wartośćFacebook — indeksowanie na potrzeby przeszukiwania skrzynkiużytkownika
I setki milionów użytkownikówI 600+ rdzeniI rozmiar indeksu: 120+ TB
open source
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 28 / 45
Struktura danych
przestrzeń kluczy (keyspace)rodzina kolumn (column family) — zdefiniowane statycznie
I super kolumny (super columns)I kolumny (columns)
wiersz (row) — pojedynczy element z przypisanymikolumnami/super-kolumnami
row-key
columnfamily1 columnfamily1supercolumn1 supercolumn2 col21 col22col1 col2 col1 col3 ...
val5 val6val1 val2 val3 val4 ...
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 29 / 45
Reprezentacja danych
klucz i wartość reprezentowana jako tablica bajtówkolumny i super-kolumny posortowane po nazwach lub czasiemodyfikacjiindeksowanie kluczy
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 30 / 45
Indeksowanie
Adam
index_by_users_interactionsMarek Kasia ...
m100 m252 m124 m511 m600 ...- - - - ...
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 31 / 45
Partycjonowanie danych
consistent hashingdynamiczne równoważenie obciążeniadwie strategie podziału:
I random partitionerI order preserving partitioner
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 32 / 45
Replikacja
możliwość konfigurowania liczby replikstrategia rozmieszczania replik:
I przydział prostyI świadoma topologi sieci: rack aware, datacenter aware
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 33 / 45
Kontrola poziomu spójności
Zapisy:anyonequorumlocal_quorumeach_quorumall
Odczyty:onequorumlocal_quorumeach_quorumall
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 34 / 45
Uspójnianie replik
uspójnianie przy odczycieanti-entropyhinted handoff
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 35 / 45
Interfejs
Thrift — RPC framework for cross-language service developmentwspierane języki:C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa,JavaScript, Node.js, Smalltalk, OCamlgotowe biblioteki dla wybranych języków programowania
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 36 / 45
Example Code
va r c l i e n t F a c t o r y = new KeyedCa s s and r aC l i e n tFac to r y (new Ca s s and r aC l i e n tPoo l F a c t o r y ( ) . C rea te ( ) ,new KeyedCa s s and r aC l i e n tFac to r y . Con f i g ( ) ) ;
va r c l i e n t = c l i e n t F a c t o r y .Make(new Endpo int ( " l o c a l h o s t " , 9 160 ) ) ;
va r key space = c l i e n t . GetKeyspace ( "Keyspace1 " ) ;va r path = new ColumnPath ( " Standard1 " , n u l l , " g r e e t i n g " ) ;key space . I n s e r t ( "0" , path , " He l l o ␣World ! " ) ;Column column = keyspace . GetColumn ( "0" , path ) ;Conso l e . Wr i t eL i n e ( column . Value ) ;
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 37 / 45
RavenDB
dokumentowa — JSONschema-lesstransakcje
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 38 / 45
Skalowalność
replikacjasharding
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 39 / 45
Interfejs
.NET ClientHTTP — RESTful API
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 40 / 45
.NET Client Example
BlogPost pos t = new BlogPost ( ) {T i t l e = " He l l o ␣RavenDB" ,Category = "RavenDB" ,Content = "This ␣ i s ␣a␣ b log ␣ 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 to r e ( pos t ) ;s e s s i o n . SaveChanges ( ) ;
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 41 / 45
RESTful Example
PUT /docs / B logPost s /1 HTTP/1 .1Accept−Encoding : d e f l a t e , g z i pContent−Type : a p p l i c a t i o n / j s o n ;c h a r s e t=ut f −8Host : 1 2 7 . 0 . 0 . 1 : 8 0 8 0Content−Length : 378
{" T i t l e " : " He l l o ␣RavenDB" ," Category " : "RavenDB" ,"Content " : "Thi s ␣ i s ␣a␣ b log ␣ 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 [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 42 / 45
Bibliografia
http://nosql-database.org/
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 43 / 45
Bibliografia
http://nosqltapes.com/
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 44 / 45
Bibliografia
http://nosqlsummer.org/
Szymon Francuzik [email protected] ()Bazy danych NoSQL Poznań, 29.10.2012 45 / 45