NoSQL adatbázis

Download Report

Transcript NoSQL adatbázis

Szárnyas Gábor ([email protected])
2012. október 11.
1970–

Codd: A Relational Model of Data for Large
Shared Data Banks, 1970

1970-es évek eleje: SEQUEL
(Structured English QUEry Language)

1986: az SQL ANSI szabvány
(Structured Query Language)


ÁRU(ÁRUKÓD, ÁRUNÉV, EGYSÉGÁR)
MENNYISÉG(DÁTUM, ÁRUKÓD, DB)
Lekérdezés: Mi az X2 kódú árú neve és mennyit
adtak el belőle 2012. október 11-én?


ÁRU(ÁRUKÓD, ÁRUNÉV, EGYSÉGÁR)
MENNYISÉG(DÁTUM, ÁRUKÓD, DB)
πÁRUNÉV, DB(σÁRUKÓD='X2' ^ DÁTUM= '20121011(mennyiség⋈áru)
{ n, d | MENNYISÉG('20121011', 'X2', d) ^ (e) ÁRU('X2', n, e)}
SELECT ÁRU.ÁRUNÉV, MENNY.DB
FROM ÁRU
INNER JOIN MENNY ON ÁRU.ÁRUKÓD = MENNY.ÁRUKÓD
WHERE ÁRU.ÁRUKÓD = "X2" AND DÁTUM = #10/11/2012#;


Kevés, nagy szereplő
Zárt forráskódú
 Oracle Database
 Microsoft SQL Server
 IBM DB2

Nyílt forráskódú
 MySQL ( Oracle)
 PostgreSQL







Kiforrott elmélet és technológia
Sok szakember
Sok szoftveres eszköz
Bevált módszerek (best practices)
Robusztus rendszerek
Ad hoc lekérdezések
Tranzakciók




Atomicity
Consistency
Isolation
Durability
Az SQL korlátai


Vertikális
Horizontális



Megosztott memória (shared memory)
Megosztott lemez (shared disk)
Megosztás néküli (shared nothing) (1986)
2005–


Sejtés: Eric Brewer, 2000
Tétel: Nancy Lynch, Seth Gilbert, 2002

Tulajdonságok:
 Consistency (nem az ACID konzisztenciája)
 Availability
 Partition tolerance

Elosztott rendszerben egy időben nem
garantálható mindhárom tulajdonság.

Consistency, Availability, Partition tolerance
C
A
P

Consistency, Availability, Partition tolerance
C
A
P

Consistency, Availability, Partition tolerance
C
A
P

Consistency, Availability, Partition tolerance
C
A
P

Áteresztőképesség [adategység/s]
Késleltetés [s]

A CAP tétel nem beszél teljesítményről


Amazon
 +100 ms késleltetés
 1% csökkenés az eladásokban

Google
 +500 ms késleltetés
 20% bevételcsökkenés

NoSQL rendszerek elméleti alapja

Google File System
Chubby
BigTable
MapReduce
Paxos Made Live








2005 óta: nyílt forráskódú adatbázis-kezelők
2009: no:sql(east) konferencia
Azóta 100+ nemrelációs adatbázis-kezelő
Fő tulajdonságok:
 Nemrelációs adatmodell
 Elosztott működés
 Nyílt forráskód
 Horizontális skálázhatóság




A CAP tétel következménye
A fejlesztők erős konzisztenciát szeretnének
Gyenge konzisztencia: hibás működés?
Fokozatos konzisztencia: kompromisszum
gyenge konzisztencia
fokozatos konzisztencia
erős konzisztencia
erős konzisztencia több adategységen

Google
 Gmail: „read your writes” konzisztenciamodell

Amazon
 vásárlói kosár: „always write” modell

facebook
 státuszok, lájkok




Atomicity
Consistency
Isolation
Durability



Basically Available
Soft state
Eventually consistent




Kulcs-érték tárolók
Dokumentumtárolók
Oszlopcsaládok
Gráfadatbázisok

Nagyon egyszerű API:
 get(key)
 put(key, value)
 delete(key)
 list(prefix)

Implementációk



Munkamenetek tárolása
Egyszerű felhasználói profilok
Vásárlói kosár


Szemistrukturált adatok
Nincs előre definiált séma
{"document": [
{
"firstname": "Klemens",
"city": "Stuttgart",
"age": "42"
},
{
"firstname": "Rajesh",
"city": "Delhi",
"age": "29"
},
{
"firstname": "Colin",
"company": "Oracle"
},
{
"cars": ["BMW 320d", "Jaguar
}
]}
firstname
city
age
company
Klemens
Stuttgart 42
NULL
Rajesh
Delhi
29
NULL
Colin
NULL
NULL
Oracle
XF"]

Implementációk



Naplózás
Tartalomkezelő rendszerek (CMS)
Valós idejű adatelemzés

Sorok = kulcs-érték párok
oszlopkulcs0
oszlopkulcs1
...
oszlopkulcsN
érték0
érték1
...
értékN
kulcs
user_ID
text
datetime
bmestudent
just decomposed a schema
to 3NF #db #exam
2011-01-03
07:30:11
user_ID
text
datetime
bmestudent
just decomposed a schema
to BCNF #db #exam
2011-01-03
07:41:36
12100
12187

Implementációk

Dokumentumtárolókhoz hasonló
 Naplózás
 CMS
 Analitika: Hadoop

G = (V, E) helyett tulajdonsággráfok
type = lives
type = city
name = Dublin
e
typ
type = person
firstname = Rajesh
age = 29
no
=k
type = person
firstname = Colin
age = 51
typ
e
ws
n
=k
type = works
from = 2000-01-01
s
ow
e
ves
i
typ
l
e=
typ
type = city
name = Delhi
type = repaired
date = 2010-12-14
=o
type = company
name = Oracle
wn
s
type = car
name = BMW 320d

Implementációk



„Connected data”
Gráffal kényelmesen reprezentálható adatok
Ajánlórendszerek
SELECT Group.*, Person_Group.*
FROM Person
JOIN Person_Group ON Person.id = Person_Group.person_id
JOIN Group ON Person_Group.Group_id = Group.id
WHERE Person.name = "Bridget"
START person = node:Person(name = 'Bridget')
MATCH person-[r:belongs_to]->group
RETURN group, r



NoSQL adatbázis-kezelők:
http://nosql-database.org/
MongoDB shell: http://try.mongodb.org/
Neo4j lekérdezések: http://console.neo4j.org/