Bazy danych NoSQL

advertisement
Bazy danych NoSQL
Szymon Francuzik
[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 Dynamo
Przeznaczenie
Realizacja
5
Cassandra
Przeznaczenie
“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) — 1970
język SQL
transakcje
ACID
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 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 [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 z
rosnącym zapotrzebowaniem.
skalowanie wertykalne (ang. scale up)
skalowanie horyzontalne (ang. scale out)
I
I
I
sharding (partycjonowanie poziome)
partycjonowanie pionowe
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
Availability
no
Consistency
Latency
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
Consistency
Poznań, 29.10.2012
10 / 45
Alternatywa dla ACID
BASE:
Basically Available
Soft-state
Eventual consistency
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
Poznań, 29.10.2012
11 / 45
Model danych
relacyjny model danych nie zawsze wygodny
I
I
normalizacja vs. efektywność
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”)
dokumentowe
grafowe
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 kluczu
przykłady:
I
I
I
Berkeley DB
Riak
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 kolumn
częściowo ustrukturalizowane
przykłady:
I
I
I
HBase
Cassandra
SimpleDB
columnfamily
row1
supercolumn1
columnfamily1
supercolumn1
row-key1
row-key2
supercolumn2
col1
col2
col1
col3
...
val1
val2
val3
val4
...
supercolumn1
column1
column2
supercolumn2
column3
row2
supercolumn2
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 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:
I
I
I
{ imie:
nazwisko:
nr_indeksu:
oceny:
dzienny:
"Jan",
"Kowalski",
98765,
[5, 4.5, 3, 4]
true }
db.students.find({nazwisko:
"Kowalski"})
CouchDB
MongoDB
ThruDB
Szymon Francuzik [email protected]
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:
I
I
I
HyperGraphDB
Neo4J
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
I
I
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 [email protected]
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 [email protected]
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 [email protected]
Bazy
() danych NoSQL
Poznań, 29.10.2012
22 / 45
Interfejs
komunikacja po HTTP
operacje:
I
I
get(key) — odsyła wartość oraz kontekst
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 replik
lista preferencji
sloppy quorum
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
Poznań, 29.10.2012
25 / 45
Uspójnianie stanu
uspójnianie przy odczycie
anti-entropy
hinted handoff
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
Poznań, 29.10.2012
26 / 45
Wielowersyjność obiektów
wersja obiektu opisywana przez zegar
wektorowy:
TS1 : {(S1 , 3), (S2 , 5), (S3 , 1)}
TS2 : {(S1 , 3), (S2 , 4), (S3 , 2)}
TS3 : {(S1 , 3), (S2 , 6), (S3 , 2)}
przechowywanie wersji powstałych
współbieżnie do czasu uspójnienia przez
klienta
przy odczycie klient otrzymuje wszystkie
dostę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 skrzynki
użytkownika
I
I
I
setki milionów użytkowników
600+ rdzeni
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
I
super kolumny (super columns)
kolumny (columns)
wiersz (row) — pojedynczy element z przypisanymi
kolumnami/super-kolumnami
columnfamily1
row-key
supercolumn1
columnfamily1
supercolumn2
col1
col2
col1
col3
...
val1
val2
val3
val4
...
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
col21
col22
val5
val6
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 [email protected]
Bazy
() danych NoSQL
Poznań, 29.10.2012
30 / 45
Indeksowanie
index_by_users_interactions
Adam
Marek
Kasia
m100
m252
m124
-
-
-
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
m511
...
m600
...
-
...
Poznań, 29.10.2012
31 / 45
Partycjonowanie danych
consistent hashing
dynamiczne równoważenie obciążenia
dwie strategie podziału:
I
I
random partitioner
order preserving partitioner
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
Poznań, 29.10.2012
32 / 45
Replikacja
możliwość konfigurowania liczby replik
strategia rozmieszczania replik:
I
I
przydział prosty
ś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:
any
one
quorum
local_quorum
each_quorum
all
Odczyty:
one
quorum
local_quorum
each_quorum
all
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
Poznań, 29.10.2012
34 / 45
Uspójnianie replik
uspójnianie przy odczycie
anti-entropy
hinted handoff
Szymon Francuzik [email protected]
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 [email protected]
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 E n d p o i n t ( " l o c a l h o s t " , 9 1 6 0 ) ) ;
var keyspace = c l i e n t . GetKeyspace ( " Keyspace1 " ) ;
v a r path = new ColumnPath ( " S t a n d a r d 1 " , 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 . V a l u e ) ;
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
Poznań, 29.10.2012
37 / 45
RavenDB
dokumentowa — JSON
schema-less
transakcje
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
Poznań, 29.10.2012
38 / 45
Skalowalność
replikacja
sharding
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
Poznań, 29.10.2012
39 / 45
Interfejs
.NET Client
HTTP — RESTful API
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
Poznań, 29.10.2012
40 / 45
.NET Client Example
B l o g P o s t p o s t = new B l o g P o s t ( ) {
T i t l e = " H e l l o ␣RavenDB" ,
C a t e g o r y = "RavenDB" ,
C o n t e n t = " T h i s ␣ i s ␣ a ␣ b l o g ␣ a b o u t ␣RavenDB" ,
Comments = new BlogComment [ ] {
new BlogComment ( ) { T i t l e=" U n r e a l i s t i c " , C o n t e n t=" e x a m p l e 1 " } ,
new BlogComment ( ) { T i t l e=" N i c e " , C o n t e n t=" e x a m p l e 2 " }}
};
s e s s i o n . Store ( post ) ;
s e s s i o n . SaveChanges ( ) ;
Szymon Francuzik [email protected]
Bazy
() danych NoSQL
Poznań, 29.10.2012
41 / 45
RESTful Example
PUT / d o c s / B l o g P o s t s /1 HTTP/ 1 . 1
Accept −E n c o d i n g : d e f l a t e , g z i p
C o n t e n t −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
C o n t e n t −L e n g t h : 378
{
" T i t l e " : " H e l l o ␣RavenDB" ,
" C a t e g o r y " : "RavenDB" ,
" C o n t e n t " : " T h i s ␣ i s ␣ a ␣ b l o g ␣ a b o u t ␣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
Download