Szárnyas Gábor 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 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= ' (mennyiség ⋈ áru) { n, d | MENNYISÉG(' ', '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 P A
P CA
A C P
C P A
Á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
Google Gmail: „read your writes” konzisztenciamodell Amazon vásárlói kosár: „always write” modell facebook státuszok, lájkok
Basically Available Soft state Eventually consistent Atomicity Consistency Isolation Durability
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 XF"] } ]} firstnamecityagecompany KlemensStuttgart42NULL RajeshDelhi29NULL ColinNULL Oracle
Implementációk
Naplózás Tartalomkezelő rendszerek (CMS) Valós idejű adatelemzés
Sorok = kulcs-érték párok
Implementációk
Dokumentumtárolókhoz hasonló Naplózás CMS Analitika: Hadoop
G = (V, E) helyett tulajdonsággráfok
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: MongoDB shell: Neo4j lekérdezések: