21
1 Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 6. Előadás: MongoDB

ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

1

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

ABR 2( Adatbázisrendszerek 2)

6. Előadás:

MongoDB

Page 2: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

2

Page 3: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

• 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

Page 4: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 5: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 6: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 7: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 8: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 9: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 10: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

További JSON

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

db.dolgok.find().pretty()

10

Page 11: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 12: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 13: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 14: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 15: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 16: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 17: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 18: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

18

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

Page 19: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

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

email:[email protected], tartalom:”…………”}, {nev:”XYZ”,email:[email protected],tartalom:”….”}], tagek: [“uszas”,”foci”,”tanulas”] } szerzok nevű dokumentum kollekció: {_id:”Illyes”,jelszo:”….”,email:”[email protected]”}

19

Page 20: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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

Page 21: ABR 2( Adatbázisrendszerek 2emte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/eloadas/MongoDB/ABR… · • Köszönet Andrew Erlichsonnak az M101P - es felkészítő kidolgozásához

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