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/