ABR 2( Adatbázisrendszerek...

Preview:

Citation preview

1

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE)

ABR 2( Adatbázisrendszerek 2)

6. Előadás:

MongoDB

2

• Köszönet Andrew Erlichsonnak az M101P-es felkészítő kidolgozásához.

• Ez képezi alapját az előadás MongoDB részének

• Szinte MINDEN onnan van, csak valamennyire lefordítva.

https://university.mongodb.com

3

Mi a MongoDB

Nem relációs adattár JSON dokumentumok számára. JSON (Java Script Object Notation) {“nev”:”Laszlo”} {kulcs : érték} {“a”:4, ”b”:5, ”c”:7} Mitől nem relációs? Lehetnek benne hierarchiák. {“a”:6,”b”:7, ”gyumolcs”:[“alma”,”korte”,”banan”]}

4

Egy dokumentumot Collection-nak nevezünk. Sémanélküli: Ugyanaz a Collection tartalmazhatja a következő két

bejegyzést: {a:7,b:8} {a:4,b:9,c:12} Skálázhatóság és teljesítőképesség memcached, kulcs:érték tipusú tárolás Funkcionalitási mélység Relációs adatbázisok MongoDB köztes állapot.

5

Mivel kevesebb a MongoDB, mint a Relációs adatbázis

• Nem támogatja a JOIN operátort • Nem támogatja a Tranzakciókat Mire van szükség: Mongod folyamatra, amelyik magát a szerver futását jelenti Mongo shell-re (kurzorvezérelt felület), amelyik kötődik a

folyamathoz. mongod indítja a szervert mongo indítja az utasításvezérelt interfészt

6

Quiz

Mely funkcionalitásokat nem támogatja a MongoDB azért, hogy a skálázhatósága megmaradjon?

Indexeket Több collection-on átívelő tranzakciókat JOIN műveleteket Másodlagos indexeket

7

show dbs megmutatja az adatbázisokat use test átvált a test adatbázisra show collections megmutatja a tárolt dokumentumokat db.dolgok.save({a:1, b:2, c:3}) db.dolgok.find() db.dolgok.save({a:3, b:4, c:6, d:200}) db.dolgok.find() ObjectID – mindig indexelve van, egyedi egy collection-

on belül db.dolgok.find({a:1})

8

Quiz

Melyik(ek) az érvényes JSON dokumentumok? {a:1, b:2, c:3} {a,1; b,4, c,6} {a:1; b:1; c:4} (a:1; b:2; c:4)

9

További JSON

db.dolgok.save({nev:”Laszlo”, cim:{utca:”Testveriseg s.u.”,varos:”Csikszereda”,postakod:150701,szam:15}})

db.dolgok.find().pretty()

10

Mely dokumentumokat fogadja el az alábbiakból a mongo shell:

{ a : 1, b : 2, c : 3 } { a : 1, b : 2, c : [ 1, 2, 3, 4, 5 ] } { a : 1, b : { }, c : [ { a : 1, b : 2 }, 5, 6 ] } { }

11

Quiz

MongoDB for Windows

Google-ben: download MongoDB (64 bit) mongod.exe --smallfiles –noprealloc (m.bat) Ez a beállítás csökkenti az erőforrás-

használatot. System, advenced system settings,

environment variables, system variables, path, edit

C:\Program Files\MongoDB\Server\3.0\bin C:\data\db

12

db.names.save({name:”Laszlo”}) db.names.find() var j = db.names.findOne() j j.name = “Antal” db.names.save(j) db.names.find() db.names.findOne() db.names.save

13

Séma. Milyen séma?

db.users.insert({nev:”Laszlo”, szul_hely:”Gyergyoszentmiklos”}) db.users.insert({nev:”Antal”,szul_hely:”Csikszereda”,kedv_szin:

”piros”}) db.users.find().pretty() var j = db.users.findOne({nev:”Laszlo”}) j.kedv_szin = “kek” db.users.save(j) db.users.find().pretty()

14

JSON újratöltve

Kétféle adatstruktúra létezik a MongoDB-ben: 1. mezők (arrays) tömb – dolgok listája [“alma”,

“korte”] 2. szótárak (dictionaries) {kulcs:ertek,} és ezek mindenféle kombinációban A legfelső szint kötelezően szótár.

QUIZ Készítsünk egy olyan JSON dokumentumot, amelyik

gyümölcs kulcsot tartalmaz, és az értéke “alma”, “körte” és “barack” lista

15

JSON aldokumentumok

QUIZ Készítsünk egy olyan JSON dokumentumot,

amelyik egyetlen kulcsot tartalmaz a legmagasabb szinten: lakcim, amelynek értéke egy olyan JSON aldokumentum, amelyik tartalmaz 3 kulcsot: utca, varos, megye, postakod a következő értékekkel:

“Testveriseg s.u.”, “Csikszereda”, ”Hargita”, ”530171”

16

Blog relációsan szerzok(szerzo_id, nev, email, jelszo) posztok(poszt_id, szerzo_id, cim, tartalom, datum) kommentek(komm_id, nev, email, tartalom) posztkomm(poszt_id, komm_id) tagek(tag_id, nev) post_tagek(poszt_id, tag_id)

17

18

Hány táblát kell felhasználnunk, hogy kiírassuk a blogot a tagekkel együtt??????

Blog JSON-ban posztok nevű dokumentum kollekció: {cim:”MongoDB kurzus”,tartalom: ”…………..”,szerzo:

“Illyes”, datum:”….”, kommentek:[{nev:”Andrew Erlichson”,

email:erlichson@gen10.com, tartalom:”…………”}, {nev:”XYZ”,email:XYZ@xyz.com,tartalom:”….”}], tagek: [“uszas”,”foci”,”tanulas”] } szerzok nevű dokumentum kollekció: {_id:”Illyes”,jelszo:”….”,email:”laszlo6783@yahoo.com”}

19

Séma tervezés. Beépíteni vagy nem???

tagek, kommentek, miért beépíteni? Csak a posztokkal egyszerre használjuk. Kevés lekérdezés

születik arra, hogy milyen tagok vannak összesen pl. A komment csak 1 posztra vonatkozik. Nincs értelme külön

kollekciónak. Az, hogy beépítsük vagy sem, attól függ, hogy az adatok

elérése hogyan valósul meg. 16 MB-nál kisebb dokumentumok vannak MongoDB-ben. Ez lehet egy oka annak, hogy bizonyos aldokumentumokat

beépítsünk-e vagy sem. 20

QUIZ

Mely esetben(tekben) lehetetlen beépíteni az adatot egy dokumentumba (át kell tenni külön kollekcióba?)

o Egy indexre van szükségünk az adatelemnél o A beépített adat meghaladhatja a 16 MB

dokumentum határt a MongoDB-n belül o Az információ többszörözve lesz több

dokumentumában ugyanannak a kollekciónak (redundancia)

o Az adat nem izomorf 21

Recommended