View
4
Download
0
Category
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