NoSql, Document Store, MongoDB. Gombos Gergő

Hasonló dokumentumok
Tematika. MongoDB koncepció JSON Schemaless logika Replicaset képzés Sharding Aggregate framework

SZERVER OLDALI JAVASCRIPT. 8. hét MongoDB, séma tervezés, performancia kérdések

RDBMS fejlesztési irányok. Ferris Wheel (óriáskerék) Jim Gray törvényei. Elosztott adatbázisok problémái. Elosztott adatbázisok

Elosztott adatbázis-kezelő formális elemzése

MongoDB THE NOSQL DATABASE. Készítette: Hugyák Tamás v2.1.1

Adatbázis-kezelő rendszerek alkalmazása. MongoDB beadandó feladat Programtervező informatikus szak

MySQL kontra MongoDB programozás. SQL és NoSQL megközelítés egy konkrét példán keresztül

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Szárnyas Gábor (BME) diáinak felhasználásával.

Adatbázis-kezelés. Harmadik előadás

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

Alternatív adatbázisok Gráfadatbázisok

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

MapReduce paradigma a CAP-tétel kontextusában. Adatb haladóknak. Balassi Márton Adatbázisok haladóknak 2012.

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

ADATBÁZIS-KEZELÉS. Adatbázis-kezelő rendszerek

mongodb gyakorlat április.

Szathmáry László Debreceni Egyetem Informatikai Kar

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Adattípusok. Max. 2GByte

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Adattípusok. Max. 2GByte

Adatbázisok* tulajdonságai

BEVEZETÉS Az objektum fogalma

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Gartner: Hype Cycle for Big Data NoSQL Database Management Systems

Adatbázisok elmélete 9. előadás

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Gráf adatbázisok NoSql, neo4j. Gombos Gergő

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Adatbázisok elmélete 9. előadás

Adatbázis rendszerek I

Adatbázis kezelés Delphiben. SQL lekérdezések

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

ANDROID ALKALMAZÁSFEJLESZTÉS

B I T M A N B I v: T M A N

Adatbázis-kezelő rendszerek. dr. Siki Zoltán

Adatmodellezés. 1. Fogalmi modell

Készítette: Szabóné Nacsa Rozália

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

Vizuális programozás gyakorlat

Tranzakció-kezelés, alapfogalmak. Vassányi István, 2012.

SQL parancsok feldolgozása

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Multimédiás adatbázisok

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

API tervezése mobil környezetbe. gyakorlat

Adatbázisok elmélete 10. előadás

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

Az Oracle rendszer komponensei

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

SQLServer. DB Recovery modes

Microsoft SQL Server telepítése

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Indexek és SQL hangolás

SQLServer. SQLServer konfigurációk

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

MDAC - Microsoft Data Access Components

Teszt topológia E1/1 E1/0 SW1 E1/0 E1/0 SW3 SW2. Kuris Ferenc - [HUN] Cisco Blog -

webalkalmazások fejlesztése elosztott alapon

9.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Adatbázis tartalmának módosítása

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Kalmár György Adatbázis alapú rendszerek

Adatbázisok - 1. előadás

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Elemi alkalmazások fejlesztése IV.

Operációs rendszerek. UNIX fájlrendszer

1. Az adatbázis fogalma, fontosabb összetevÿi, felhasználási módjai

Bevezetés: az SQL-be

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

Az SQL adatbázisnyelv: DML

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Virtuális Obszervatórium. Gombos Gergő

Adatbázis rendszerek SQL nyomkövetés

Adatbázis-kezelés alapok Adatbázisok című tárgyhoz, ismétlés kapcsán

A könyv tartalomjegyzéke

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Listák, szótárak, fájlok Listák, szótárak, fájlok

SQL Server High Availability. Bevezetés az SQL Server magas rendelkezésre állási megoldásaiba

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 6.ELŐADÁS. Fájlkezelés PHP-ben

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

Tranzakciókezelés PL/SQL-ben

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Adatbázis használata PHP-ből

Hálózatba kapcsolt adatbázisok. Erős Levente, TMIT 2011.

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Adatbázis-kezelés ODBC driverrel

DSD DSD. Egy országos méretű orvosi adatbázissal kapcsolatos informatikai kihívások. Kovács László Pataki Balázs Pataki Máté MTA SZTAKI DSD

Átírás:

NoSql, Document Store, MongoDB Gombos Gergő

Tematika NoSql Elosztott rendszerek konzisztenciája CAP, ACID, BASE MongoDB Koncepció JSON, BSON Adattárolás Replica, sharding Mongo CRUD Aggregation framework Korszerű adatbázisok MongoDB 2

Elosztott rendszerek konzisztenciája Az adatokat sok gépen tároljuk Scale-out (~2000-) A gépek meghibásodhatnak Az adatokhoz több belépési ponton keresztül is hozzáférhetünk Ne legyen bottle-neck a hozzáférés Biztosítani kell: Konzisztenciát Rendelkezésre állást Partíció tűrést Korszerű adatbázisok MongoDB 3

Konzisztencia (C) Biztonsági mentés helyett replikáció Az adatok több példányban tárolódnak Mi biztosítja, hogy a replikák konzisztensek maradnak? Kell valami replikaciós protokoll Általában aszinkron Konzisztencia ablak Mennyi idő után válik a rendszer konzisztenssé Korszerű adatbázisok MongoDB 4

Rendelkezésre állás (A) Az adatok folyton elérhetőek Több belépési pont Nincsen egyetlen kritikus elem sem Geo-redundancia A válasz legyen gyors Minimális késleltetés Meg akkor is, ha a visszaadott adat nem konzisztens (pl. Facebook idővonal) Korszerű adatbázisok MongoDB 5

Partíció tűrés (P) Elosztott rendszer Hálózati kapcsolat (lassú, törékeny) Több belépési pont A rendszer akkor is működőképes marad, ha egyes részei nem látják egymást Elosztott funkcionalitás Pl. Facebook felhasználó bejelentkezése, fénykép megosztása, levelesláda Korszerű adatbázisok MongoDB 6

CAP tétel Korszerű adatbázisok MongoDB 7

ACID tranzakciós modell Atomicity Egy tranzakció vagy teljesen lefut, vagy nem fut le Consistency Egy tranzakció hatására az adatbázis konzisztens állapotból konzisztens állapotba jut Isolation A tranzakciók konkurens végrehajtásának meg kell egyezni valamilyen szekvenciális végrehajtás eredményével Durability Ha egy tranzakció sikeresre volt jelentve, akkor a változásnak tartósnak kell lennie Korszerű adatbázisok MongoDB 8

BASE tranzakciós modell BA: Basically available Főleg CP rendszer esetében Legalább a rendszer egy része maradjon elérhető Soft-state A változások véges ideig tartó üzenetekkel történnek A rendszer állapota akkor is változhat, ha épp nincsen input Minden adatra lehet egy érvényességi idő Ha ez lejárt, akkor meg kell vizsgálni, hogy konzisztens-e még Eventually consistent Főleg AP rendszer esetében A változások aszinkron propagálnak (gossip protokollok) A változások Egy idő után konzisztenssé válik Konzisztencia ablak Korszerű adatbázisok MongoDB 9

Inkonzisztencia feloldása A hibák miatt inkonzisztencia léphet fel Fel kell oldani: olvasáskor, íráskor, aszinkron Többségi szavazáson múló algoritmusok A replikákat tartalmazó node-ok szavaznak, quorumok Időbélyegzőn alapuló megoldások Mindig a legfrissebb adatot tekintjük Korszerű adatbázisok MongoDB 10

MongoDB Korszerű adatbázisok MongoDB 11

MongoDB= document oriented A dokumentumok tárolása nyelv független BSON formátumban. { } x : 3, y : abc, z : [1,2], d : { } Korszerű adatbázisok MongoDB 12

JSON strukturált dokumentumok tárolására szolgál hasonló dokumentum formátum pl. XML Adattípusok: string number boolean NULL array object/document asszociatív tömb, de csak string lehet a kulcs { } name : jill, age : 2, voted : true, school : null, likes : [ tennis, math ], addr : { city : New York, addr : 3rd Street } Korszerű adatbázisok MongoDB 13

XML vs JSON <phones> <phone type = home >123</phone> <phone type = mobile >456</phone> </phones> { } phones : [ { phone : 123, type : home }, { phone : 456, type : mobil } ] Korszerű adatbázisok MongoDB 14

BSON JSON bináris reprezentációja Könnyen skálázható Mongoimport BSON műveletekhez JSON: { } a : 3, b : xyz BSON: 23 \x10 a \0 3 \x02 b \0 x y z \0 \0 Dok.hossz kulcs típus(string) érték típus(int) érték kulcs dok. vege Korszerű adatbázisok MongoDB 15

Schemaless Ez lehet egy collection: {alakzat: négyszög, x: 3, y:4, terület : 12} {alakzat: kör, r: 1, terület : 3.14} {q: 456} Gyakorlatban konzisztens struktúra van! { name : Joe, age : 30, interests : football } { name : Kate, age : 25 } Korszerű adatbázisok MongoDB 16

MongoDB elemek RDBMS Database Table Row Column Index Join Foreign Key Queries return records MongoDB Database Collection Document (JSON,BSON) Field Index Embedded Document Reference Queries return a cursor Korszerű adatbázisok MongoDB 17

MongoDB high availability Replica Set 1 Primary 2-48 Secondaries Másolatok az eredeti adatról Több sort érintő műveletek soronként replikálódnak A kliens mindig a primary-ra kapcsolódik Az írás mindig a primary-re megy Az olvasás mehet a secondary-ra Korszerű adatbázisok MongoDB 18

MongoDB high availability konszenzus : primary hiba esetén szavazás az új primaryról Korszerű adatbázisok MongoDB 19

MongoDB high availability Sharding a collection-ök elosztva klaszterben shard key alapján shard key = indexelt adattag shardon belül lehetnek replikák csökkenti az egyes szerverek terhelést lekérdezések több gépen kevesebb adat az egyes gépeken Korszerű adatbázisok MongoDB 20

MongoDB sharding komponensek shards tárolják az adatokat routers interface kliens és shard között config server metadata az adatokról Korszerű adatbázisok MongoDB 21

Sharding megoldások Range based sharding shard key tartományok szerinti tárolás hatékony tartományi lekérdezésekhez Korszerű adatbázisok MongoDB 22

Sharding megoldások Hash based sharding adott hash függvény alapján osztjuk az adatot Korszerű adatbázisok MongoDB 23

Adatok beszúrása write concern Insert, update, delete utasításnál: Erős ellenőrzés = lassú válasz Gyenge ellenőrzés = gyors válasz MongoDB paraméterezhető Korszerű adatbázisok MongoDB 24

write concern szintjei w és j paraméterekkel állíthatóak be! Unacknowledged Acknowledged (w:1) Journaled (j:true) Replica Set Acknowledged (w:2) Korszerű adatbázisok MongoDB 25

Unanknowledged Kliens nem kap visszajelzést az írásról Nagyon gyors írás Adatok elveszhetnek! hálózati hiba kulcs ütközés Korszerű adatbázisok MongoDB 26

Acknowledged A mongod nyugtát küld Kliens érzékeli a hibákat (hálózati, kulcsütközés) Ez a default érték Nem garantálja hogy lemezre is kiírtuk az adatot! Korszerű adatbázisok MongoDB 27

Journaled A mongod addig nem nyugtáz, amíg nem írja be a Journal-be. (logolás) Journal-t engedélyezni kell Korszerű adatbázisok MongoDB 28

Replica Set Acknowledged Beállítható hány replikának kell visszaigazolni az írást, mielőtt a kliensnek jelzi a mongod Korszerű adatbázisok MongoDB 29

MongoDB adattárolás Minden MongoDB instance tartalmaza: Namespace file Journal file Data file Data file tárolja extentekben: BSON dokumentumok Indexek MongoDB metadata adat Extent: logikai konténer Korszerű adatbázisok MongoDB 30

Extents Adat és index külön extent Egy extent egy collection-höz tartozik Egy collection lehet több extentben Korszerű adatbázisok MongoDB 31

Metrikák db.stats() statisztikák az adatbázisunkról datasize storagesize filesize Korszerű adatbázisok MongoDB 32

datasize A datasize a dokumentumok és a lefoglalt mezők összege byte-ban Ha az adat változik,de elfér a lefoglalt területen akkor a datasize nem változik Korszerű adatbázisok MongoDB 33

storagesize Az adat extent-ek mérete Ez tartalmazza a nem használt területeket is Korszerű adatbázisok MongoDB 34

filesize adat extent-ek, index extent-ek és a nem használt területek a file-ban A teljes lefoglalt terület a lemezen Korszerű adatbázisok MongoDB 35

Mongo shell Elérhető: Windows, Linux, MacOS adatok importálása mongoimport.exe --db test --collection restaurants --drop --file mongo_restaurant_dataset.json mongo shell elindítása mongo.exe Korszerű adatbázisok MongoDB 36

Mongo shell adatbázisok listázása show dbs collectionok listázása show collections adatbázis kiválasztása use test Korszerű adatbázisok MongoDB 37

Mongo CRUD Create db.collection.insert( <document> ) db.collection.update( <query>, <update>, { upsert: true } ) Read db.collection.find( <query>, <projection> ) db.collection.findone( <query>, <projection> ) Update db.collection.update( <query>, <update>, <options> ) Delete db.collection.remove( <query>, <justone> ) Korszerű adatbázisok MongoDB 38

Mongo CRUD adatok listázása db.restaurants.find() hány elem van db.restaurants.count() mely éttermek vannak Manhattan kerületben? db.restaurants.find({borough:"manhattan"}) Korszerű adatbázisok MongoDB 39

Mongo CRUD Korszerű adatbázisok MongoDB 40

restaurant példa { } "_id" : ObjectId("56ed68032ea3567be5c25d32"), "address" : { "building" : "284", "coord" : [ -73.9829239, 40.6580753 ], "street" : "Prospect Park West", "zipcode" : "11215" }, "borough" : "Brooklyn", "cuisine" : "American ", "grades" : [ { "date" : ISODate("2014-11-19T00:00:00Z"), "grade" : "A", "score" : 11 }, { "date" : ISODate("2013-11-14T00:00:00Z"), "grade" : "A", "score" : 2 }, { "date" : ISODate("2012-12-05T00:00:00Z"), "grade" : "A", "score" : 13 }, { "date" : ISODate("2012-05-17T00:00:00Z"), "grade" : "A", "score" : 11 } ], "name" : "The Movable Feast", "restaurant_id" : "40361606" Korszerű adatbázisok MongoDB 41

Mongo CRUD Beágyazott objektumra szűrés db.restaurants.find( { "address.zipcode": "10075" } ) keresés tömbben db.restaurants.find( { "grades.grade": "B" } ) operátorok használata db.restaurants.find( { "grades.score": { $gt: 30 } } ) db.restaurants.find( { "grades.score": { $lt: 10 } } ) Korszerű adatbázisok MongoDB 42

Mongo CRUD feltételek összekapcsolása logikai és db.restaurants.find( { "cuisine": "Italian", "address.zipcode": "10075" } ) logikai vagy db.restaurants.find( { $or: [ { "cuisine": "Italian" }, { "address.zipcode": "10075" } ] }) rendezés db.restaurants.find().sort( { "borough": 1, "address.zipcode": 1 } ) Korszerű adatbázisok MongoDB 43

Mongo CRUD update - frissíti az első Juni nevű objektumot db.restaurants.update( { "name" : "Juni" }, { $set: { "cuisine": "American (New)" }, $currentdate: { "lastmodified": true } } ) update objektumon belül db.restaurants.update( { "restaurant_id" : "41156888" }, { $set: { "address.street": "East 31st Street" } } ) Korszerű adatbázisok MongoDB 44

Mongo CRUD update több elem frissítése db.restaurants.update( { "address.zipcode": "10016", cuisine: "Other" }, { $set: { cuisine: "Category To Be Determined" }, $currentdate: { "lastmodified": true } }, { multi: true} ) Korszerű adatbázisok MongoDB 45

Mongo CRUD törlés összes egyező dokumentumot törli db.restaurants.remove( { "borough": "Manhattan" } ) törlés csak az elsőt db.restaurants.remove( { "borough": "Queens" }, { justone: true } ) Korszerű adatbázisok MongoDB 46

Aggregation framework pipeline filozófia, mint a unix-nál Korszerű adatbázisok MongoDB 47

Aggregation framework operátorok: $project - vetítés $match - szűrés $limit - első n sor $skip - hagyjon ki n sort $group - csoportosítás $sort - rendezés $exists - létezik Korszerű adatbázisok MongoDB 48

Aggregation framework csoportosítás db.restaurants.aggregate( [ { $group: { "_id": "$borough", "count": { $sum: 1 } } } ] ); Korszerű adatbázisok MongoDB 49

Példa lekérdezés Hotel adatbázis Melyik az a három állam, ahol a legtöbb olyan szálloda van, amelyiknek nincsen parkolója, és mégis 50% fölötti a kihasználtsága? Korszerű adatbázisok MongoDB 50

Példa lekérdezés Azon szállodák érdekelnek, amiknek nincs parkolója {$match: {parking: false}}, Megtartjuk az _id-t, a state-et, illetve pct néven behozunk egy új (számított) attribútumot, ami a free/rooms hányadosként áll elő {$project: {_id:1, state:1, pct: {$divide: ["$free", "$rooms"]}}}, Korszerű adatbázisok MongoDB 51

Példa lekérdezés Ezekből továbbengedjük azokat, ahol a pct 0.5 fölött van {$match: {pct: {$gt: 0.5}}}, Csoportosítunk, a csoportosítás kulcsa a state attribútum, és az egyes eredmény-rekordoknak lesz még egy n nevű attribútuma, ami úgy áll elő, hogy az adott state kódú bemenő rekordokra szummázzuk az 1-et, azaz megszámoljuk az ilyen szállodákat {$group: {_id: "$state", n: {$sum: 1}}}, Korszerű adatbázisok MongoDB 52

Példa lekérdezés A szállodaszám szerinti csökkenő sorrendből érdekel minket... {$sort: {n: -1}}, Az első három. {$limit: 3}, Korszerű adatbázisok MongoDB 53

Példa lekérdezés db.hotels.aggregate([ {$match: {parking: false}}, {$project: {_id:1, state:1, pct: {$divide: ["$free", "$rooms"]}}}, {$match: {pct: {$gt: 0.5}}}, {$group: {_id: "$state", n: {$sum: 1}}}, {$sort: {n: -1}}, {$limit: 3}, ]) Korszerű adatbázisok MongoDB 54

Köszönöm a figyelmet! Forrás http://blog.flux7.com/blogs/nosql/cap-theorem-whydoes-it-matter http://crocodillon.com/images/blog/2013/mongodbfor-dbas bson.png http://blog.mlab.com/2014/01/how-big-is-yourmongodb/ https://docs.mongodb.org/manual/core/shardingintroduction/ https://docs.mongodb.org/manual/core/replica-setprimary/ Korszerű adatbázisok MongoDB 55