nosql adatbázis-kezelők
DESCRIPTION
Szárnyas Gábor ( szarnyas @ db.bme.hu ) 2012. október 11. NoSQL adatbázis-kezelők. Relációs adatbázisok. 1970–. Relációs adatmodell, SQL. Codd : A Relational Model of Data for Large Shared Data Banks, 1970 1970-es évek eleje: SEQUEL ( Structured English QUEry Language ) - PowerPoint PPT PresentationTRANSCRIPT
NoSQL adatbázis-kezelők
Szárnyas Gábor ([email protected])2012. október 11.
Relációs adatbázisok1970–
Relációs adatmodell, SQL
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)
Relációs lekérdezések
Á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?
Relációs lekérdezések
Á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.DBFROM ÁRUINNER JOIN MENNY ON ÁRU.ÁRUKÓD = MENNY.ÁRUKÓDWHERE ÁRU.ÁRUKÓD = "X2" AND DÁTUM = #10/11/2012#;
Relációs adatbázisok ma
Kevés, nagy szereplő Zárt forráskódú
Oracle Database Microsoft SQL Server IBM DB2
Nyílt forráskódú MySQL ( Oracle) PostgreSQL
Az SQL erősségei
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
Tranzakciók – ACID garanciák
Atomicity Consistency Isolation Durability
Big DataAz SQL korlátai
Gartner: Hype Cycle for Big Data
Skálázhatóság
Vertikális Horizontális
Elosztott architektúrák
Megosztott memória (shared memory)
Megosztott lemez (shared disk) Megosztás néküli (shared nothing)
(1986)
Szerverek száma a webes világban
NoSQL2005–
A CAP tétel (2002)
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.
CAP
Consistency, Availability, Partition tolerance
C
P
A
P
CAP
Consistency, Availability, Partition tolerance
C A
A
CAP
Consistency, Availability, Partition tolerance
C
P
CAP
Consistency, Availability, Partition tolerance
C
P
A
Teljesítménymetrikák
Áteresztőképesség [adategység/s] Késleltetés [s]
A CAP tétel nem beszél teljesítményről
A késleltetés ára
Amazon +100 ms késleltetés 1% csökkenés az eladásokban
Google +500 ms késleltetés 20% bevételcsökkenés
Google cikkek (2004–2006)
NoSQL rendszerek elméleti alapja
Google File System Chubby BigTable MapReduce Paxos Made Live
Érdekesség: eredeti Paxos cikk
NoSQL „mozgalom”
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
Konzisztenciamodellek
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
Konzisztenciakövetelmények
Google Gmail: „read your writes”
konzisztenciamodell Amazon
vásárlói kosár: „always write” modell facebook
státuszok, lájkok
ACID–BASE
Basically Available
Soft state Eventually
consistent
Atomicity Consistency Isolation Durability
NoSQL adatbázisok típusai
Kulcs-érték tárolók Dokumentumtárolók Oszlopcsaládok Gráfadatbázisok
Kulcs-érték tárolók
Nagyon egyszerű API: get(key) put(key, value) delete(key) list(prefix)
Kulcs-érték tárolók
Implementációk
Kulcs-érték tárolók felhasználása
Munkamenetek tárolása Egyszerű felhasználói profilok Vásárlói kosár
Dokumentumtárolók
Szemistrukturált adatok Nincs előre definiált séma
Dokumentumtárolók – JSON{"document": [ { "firstname": "Klemens", "city": "Stuttgart", "age": "42" }, { "firstname": "Rajesh", "city": "Delhi", "age": "29" }, { "firstname": "Colin", "company": "Oracle" }, { "cars": ["BMW 320d", "Jaguar XF"] }]}
firstname
city age company
Klemens Stuttgart
42 NULL
Rajesh Delhi 29 NULL
Colin NULL NULL Oracle
Dokumentumtárolók
Implementációk
Dokumentumtárolók
Naplózás Tartalomkezelő rendszerek (CMS) Valós idejű adatelemzés
Oszlopcsaládok
Sorok = kulcs-érték párok
kulcs
oszlopkulcs0 oszlopkulcs1 oszlopkulcsN...
...érték0 érték1 értékN
12100
user_ID text datetime
bmestudentjust decomposed a schema
to 3NF #db #exam2011-01-03
07:30:11
12187
user_ID text datetime
bmestudentjust decomposed a schema
to BCNF #db #exam2011-01-03
07:41:36
Oszloptárolók
Implementációk
Oszloptárolók használata
Dokumentumtárolókhoz hasonló Naplózás CMS Analitika: Hadoop
Gráfadatbázisok
G = (V, E) helyett tulajdonsággráfok
type = personfirstname = Colin
age = 51
type = personfirstname = Rajesh
age = 29
type = cityname = Dublin
type = cityname = Delhi
type = companyname = Oracle
type = carname = BMW 320d
type = worksfrom = 2000-01-01
type = owns
type = lives
type = repaireddate = 2010-12-14
type = lives
type = knows
type = knows
Gráfadatbázisok
Implementációk
Gráfadatbázisok
„Connected data” Gráffal kényelmesen reprezentálható
adatok Ajánlórendszerek
Neo4j gráfadatbázis lekérdezése
SELECT Group.*, Person_Group.*FROM PersonJOIN Person_Group ON Person.id = Person_Group.person_idJOIN Group ON Person_Group.Group_id = Group.idWHERE Person.name = "Bridget"
START person = node:Person(name = 'Bridget')MATCH person-[r:belongs_to]->groupRETURN group, r
Linkek
NoSQL adatbázis-kezelők:http://nosql-database.org/
MongoDB shell: http://try.mongodb.org/
Neo4j lekérdezések: http://console.neo4j.org/
Köszönöm a figyelmet!