abr 2( adatbázisrendszerek 2 9. előadás:...
TRANSCRIPT
![Page 1: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/1.jpg)
1
Sapientia - Erdélyi Magyar TudományEgyetem (EMTE)
ABR 2( Adatbázisrendszerek 2)
9. Előadás:
teljesítménynövelés
![Page 2: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/2.jpg)
Tárolási motrok
Beilleszthető tárolási motrok Mi egy beilleszthető tárolási motor (storage engine)? Egy interfész a merevlemez és az adatbázis között.
2
Python, pymongo
MongoDB szerver
Storage engine
Merev-lemez
Memória
![Page 3: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/3.jpg)
QUIZ – Tárolási motrok
A tárolási motrok közvetlenül meghatározzák a következők közül melyiket (melyikeket)?
Az index formátumát A drájverek sodrony (pipeline) protokollját A klaszterek architektúráját Az adat fájl-formátumát
3
![Page 4: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/4.jpg)
MMAPv1
Az eredeti tároló motor a MongoDB-ben. Allocate memory or map files or devices in memory LIBRARY Standard C Library (libc, -lc) SYNOPSYS #include<sys/mman.h>
4
100 GB 100 GB Virtual
Memory
![Page 5: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/5.jpg)
MMAPv1
1. Kollekció szintű zárolás 2. Síkbeli módosítás (in plane updates). Ha van hely
módosításra, akkor marad helyben a dokumentum, másképp az egészet elköltöztetjük.
3. Kettes kitevő használata (power of two sizes). 3 byte→4 byte, 7 byte→8 byte, 19 byte→32 byte
A 3-as hozzásegít a 2-es kézbetartásához. Ha a
módosítás kevéssel növeli meg a dokumentumot, akkor helyben kifér a módosítás.
5
![Page 6: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/6.jpg)
MMAPv1 -QUIZ
Mely megállapítások érvényesek az MMAPV1 tárolási motornál?
MMAP dokumentum szintű zárolást biztosít MMAP automatikusan a 2-es hatványának
megfelelő helyet biztosít, mikor dokumentumokat szúrunk be
MMAP a mmap rendszer felső szintjén van, amelyik megfelelteti a fájlokat a memóriába
MMAP menedzseli a használt memóriáját minden megfeleletetett fájlnak, eldöntve, hogy mely részek legyenek a memóriában a lemezről
6
![Page 7: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/7.jpg)
Wired Tiger
1. Documentum szintű konkurrencia (különböző dokumentumokra érvényes)
2. Tömörítést alkalmaz mint a dokumentumokra mint az indexekre. A lemezre való írás előtt tömörít, mert a memóriában való tömörítés fölösleges.
3. Nincs helybeni módosítás. Használata: - storageEngine wiredTiger
7
![Page 8: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/8.jpg)
Indexek {name:”Zoe”,hair_color:”brown”,DOB:”2001-03-23”} A kollekció összevissza van a lemezen. Ha nincs index és Zoe-t
szeretnénk megkeresni, az egész kollekciót végig kell vizsgálni. Az index tartalmaz egy pointert, ahol megtalálható a rekord. B-fákkal van megoldva. (name,hair_color) lehet összetett index is. Ha csak a hajszínre szeretnénk keresni, akkor bajban vagyunk. 8
Andrew Barry Zoe
Andrew Blonde Andrew Red Barry Black
![Page 9: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/9.jpg)
Indexek (a,b,c) indexelve van, akkor használható Írás – lassúbb lesz. Olvasás nagyon gyors lehet. Mikor nagyon sok elemű kollekciót másolunk valahova, érdemes
egyszer átmásolni, majd utána indexelni. 9
a igen a,b igen a,b,c igen b nem b,c nem c nem a,c részlegesen
![Page 10: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/10.jpg)
Quiz – indexek
Melyik optimizációnak van a legnagyobb hatása az adatbázis teljesítményére
o Megnövelni a RAM-ot, hogy az állomány, amit feldolgozunk elférjen benne.
o Gyorsabb lemezegységet adunk hozzá, s így azon műveletek, amelyek lemezelérést ígényelnek sokkal gyorsabbak
o Kicserélni a Processzort (pl. 2x gyorsabbra) o Olyan indexeket adunk a kollekcióhoz, amelyik a
lekérdezések kis százalékában vizsgálja végig a kollekciót
10
![Page 11: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/11.jpg)
Index hozzáadása
use school; db.students.findOne() db.students.find({student_id:5}) db.students.explain().find({student_id:5}) Winning plan: COLLSCAN – collection scan, vagyis
a kollekció összes dokumentumát megvizsgálja. db.students.createIndex ({student_id:1}); db.students.explain(true).find({student_id:5}) - execution stage db.students.createIndex({student_id:1,class_id:-1}) 11
![Page 12: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/12.jpg)
QUIZ – indexek készítése
Kérünk egy Mongo shell utasítást, amelyik a students kollekcióhoz hozzaad egy olyan indexet, amelyiknek a kulcsa class, student_name.
Egyik se megy a -1 irányba.
12
![Page 13: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/13.jpg)
Indexek megtalálása (és törlése)
> db.students.getIndexes() [ { "v" : 1, "key" : {"_id" : 1}, "name" : "_id_", "ns" : "school.students" },{ "v" : 1, "key" : {"student_id" : 1}, "name" : "student_id_1", "ns" : "school.students" } ] db.students.dropIndex ({student_id:1}); 13
![Page 14: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/14.jpg)
QUIZ - Indexek megtalálása (és törlése)
Melyik érvényes utasítás egy kollekciónak (collection) az indexeinek felfedésére?
o db.collection.findIndexes() o db.getIndexes() o db.collection.find("indexes") o show indexes o db.collection.getIndexes()
14
![Page 15: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/15.jpg)
Többkulcsú indexek (multikey indexes)
Tömbökön (arrays) készül ez az index. {nev: “Laszlo”, tagek: [”asztalitenisz”,”minifoci”,”bridge”], szin: “kek”, helyseg:[“Csikszereda”,”Hargita”] } (tagek) (tagek, szin) Nem lehet 2 array tipus, pl. (tagek,helyseg) nem jó Létező adatbázison nem készíti el az indexet, ha 2
array típus van. Ha létezik az index, nem engedi bevinni a nem megfelelő dokumentumot.
15
![Page 16: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/16.jpg)
QUIZ – többkulcsu indexek
A foo kollekción a következő indexet készítettük: db.foo.createIndex( { a:1, b:1 } ) Mely bevitelek érvényesek erre a kollekcióra? db.foo.insert( { a : ["apples", "oranges" ], b : "grapes" } ) db.foo.insert( { a : "grapes", b : "oranges" } ) db.foo.insert( { a : "grapes", b : [ 8, 9, 10 ] } ) db.foo.insert( { a : [ 1, 2, 3 ], b : [ 5, 6, 7 ] } )
16
![Page 17: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/17.jpg)
Dot notation (pont jelölés és többkulcs)
db.students.createIndex({“scores.score”:-1}) db.students.explain().find({'scores':{$elemMatch:{typ
e:'exam',score:{$gt:99.8}}}}) db.students.find({$and:[{'scores.type':'exam'},
{'scores.score':{'$gt':99.8}}]})
17
![Page 18: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/18.jpg)
Dot notation (pont jelölés és többkulcs)
QUIZ People kollekció így néz ki: { "_id" : ObjectId("551458821b87e1799edbebc4"), "name" :
"Eliot Horowitz", "work_history" : [ { "company" : "DoubleClick", "position" : "Software Engineer" }, { "company" : "ShopWiki", "position" : "Founder & CTO" }, { "company" : "MongoDB", "position" : "Founder & CTO" } ] }
Készítsünk indexet a company-ra, csökkenő sorrendben. db.people.createIndex({“work_history.company”:-1})
18
![Page 19: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/19.jpg)
Index készítési opció, Unique
Az eddig elkészített indexek nem voltak egyediek. Egyediek voltak csak az _id indexek, amelyet a rendszer készített el.
db.stuff.drop() db.stuff.insert({'thing':'apple'}) db.stuff.insert({'thing':'pear'}) db.stuff.insert({'thing':'apple'}) db.stuff.createIndex({thing:1}); db.stuff.dropIndex({thing:1}); db.stuff.createIndex({thing:1},{unique:true}); db.stuff.remove({thing:'apple'},{justOne:true}); db.stuff.getIndexes()
19
![Page 20: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/20.jpg)
QUIZ – egyedi (unique) indexek
Kérjük megadni a mongo shell parancsot, amelyik egy egyedi indexet készít a student_id, class_id-re, növekő sorrendben a students kollekcióra.
20
![Page 21: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/21.jpg)
Gyér (sparse) indexek
Adott az alábbi 4 dokumentum. {a:1, b:2, c:5} {a:10, b:5, c:10} {a:13, b:17} {a:7, b:23} Egyedi (Unique) indexet a c-re nem tudok csinálni. Sparse: ne vedd be az indexbe azon dokumentumokat, ahol
hiányzik a kulcs. db.collection.createIndex({c:1},{unique:true}) – nem működik db.collection.createIndex({c:1},{unique:true, sparse:true}) Sort esetében nem hasznos, az egész kollekciót végigpásztázza.
21
![Page 22: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/22.jpg)
QUIZ – gyér (sparse) indexek
Melyek a gyér indexek előnyei. Válaszd ki mindeniket, amelyik talál:
Az indexek csak akkor lehetnek többkulcsuak, ha gyérek
Az index minden esetben sokkal gyorsabban végzi a sorbaállítást.
Nagyobb felxibilitást érünk el a Unique index készítésével
Az index kevesebb helyet foglal el, mintha nem lenne gyér
22
![Page 23: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/23.jpg)
Indexek készítése a háttérben
Tulajdonság Előtérben Háttérben Alapértelmezett Igen Nem Sebesség Gyors Lassú DB blokk WRITE Igen Nem DB blokk READ Igen Nem
23
db.students.createIndex({‘scores.score’:1},{background:true})
![Page 24: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/24.jpg)
QUIZ – indexek készítése a háttérben
Mely állítások igazak a MongoDB háttérben elkészített indexeiről:
Egy mongod szerver egyszerre csak egyetlen indexet tud a
háttérben elkészíteni minden adatbázisra. Bár az adatbázis-szerver fogadja a kéréseket, a háttérben levő
index készítése blokkolja azt a mongo shellt, amelyikben az index készítési parancsot kiadtuk.
A háttérben való index készítése hoszabb időt igényel, mint az előtérben készített index
Mongo 2.2 –ben és azután az indexek a háttérben készülnek alapértelmezés szerint
24
![Page 25: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/25.jpg)
Az explain() használata
Megadja, hogy az adatbázis mit csinál a lekérdezéssel. Hogyan hajtja végre, milyen indexeket használ, hány dokumentumot vizsgál meg. Megadja, mit fog csinálni az adatbázis.
db.foo.find().explain() – volt használatban db.foo.explain().find() db.foo.explain().update() db.foo.explain().remove() db.foo.explain().aggregate() db.foo.explain().help() insert()-re nem használható
25
![Page 26: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/26.jpg)
QUIZ – explain() használata
Melyek érvényes utak megkeresni, hogy milyen indexeket használ egy sajátos lekérdezés?
curs = db.example.find( { a : 1, b : 2 } ); curs.explain() db.example.find( { a : 1, b : 2 } ).explain() db.example.explain().remove( { a : 1, b : 2 } ) db.example.remove( { a : 1, b : 2 } ).explain() db.example.explain().find( { a : 1, b : 2 } ) var exp = db.example.explain(); exp.find( { a : 1, b : 2 } )
26
![Page 27: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/27.jpg)
Explain
Query planner – lekérdezés tervező executionStats – végrehajtási statisztikák allPlansExecution – minden végrehajtási terv var = db.example.explain("executionStats"); var = db.example.explain(“allPlansExecution");
27
![Page 28: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/28.jpg)
QUIZ
Az explain által megadott kimenetet láthatjuk. Mi írja le legjobban a történteket?
o A lekérdezés 10000 dokmentumot fésült át és 520
miliszekundumot tartott o A lekérdezés terv-magyarázata egy kurzor által keletkezik o A lekérdezés használ egy BasicCursor nevű indexet és az
eredményt 619 miliszekundum alatt szolgáltatja o A lekérdezés 999999 dokumentumot fésült át, eredményül
10000 dokumentumot kapott 619 miliszekundum alatt
28
![Page 29: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/29.jpg)
Covered queries (Lefedett lekérdezések)
Egy index által teljesen megvalósítható. Nem szükséges semmilyen más keresés.
Sokkal gyorsabb minden más lekérdezésnél. var = db.numbers.explain(“executionStats”); exp.find({i:45, j:23}); executionStats – 100 returned docs (nReturned) “totalDocsExamined “: 100 “totalKeysExamined”: 100 _id:0, i:1, j:1, k:1 (totalDocsExamined: 0) Ha kihagyjuk a kéket, nem működik 29
![Page 30: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/30.jpg)
Lefedett lekérdezés (covered query) - quiz
Egy lefedett lekérdezést szeretnél készíteni az example kollekción. A következő indexeid vannak:
{ name : 1, dob : 1 } { _id : 1 } { hair : 1, name : 1 } db.example.find( { name : { $in : ["Alfred", "Bruce" ] } }, {
name : 1, hair : 1 } ) db.example.find( { _id : 1117008 }, { _id : 0, name : 1, dob :
1 } ) db.example.find( { name : { $in : [ "Bart", "Homer" ] } },
{_id : 0, hair : 1, name : 1} ) db.example.find( { name : { $in : [ "Bart", "Homer" ] } },
{_id : 0, dob : 1, name : 1} ) 30
![Page 31: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/31.jpg)
Mikor használjuk az indexet?
b, c, c, b, d, e, e, f, a, b, c Lekérdezési terv, amelyik 3 kandidáns indexet használ
31
![Page 32: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/32.jpg)
QUIZ – mikor, melyik indexet használjuk
Adott a foo kollekció a következő indexxel: db.foo.createIndex( { a : 1, b : 1, c : 1 } ) Mely lekérdezések fogják használni ezt az indexet? db.foo.find({c:1}).sort({a:-1, b:1}) db.foo.find( { c : 1 } ).sort( { a : 1, b : 1 } ) db.foo.find( { a : 3 } ) db.foo.find( { b : 3, c : 4 } )
32
![Page 33: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/33.jpg)
Milyen nagy az index állományunk?
Lényeg, hogy az index beférjen a memóriába. db.students.stats() “totalIndexSize”: 668003728 db.students.totalIndexSize()
33
![Page 34: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/34.jpg)
Index kardinalitás
normál gyér többkulcsú 1:1 <=dokumentumok >dokumenutmok Feltételezzük, hogy módosítunk egy dokumentumot,
amelynek egy kulcsa a tag és a módosítás miatt a merevlemezre kell írnunk. Ha a dokumentum 100 tag-et tartalmaz és azok többkulcsos (lista) indexként vannak nyilvántartva, hány helyen kell módosítani az index pointert?
34
![Page 35: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/35.jpg)
Földrajzi indexek (geospatial indexes)-2D
35
x
y
Ember
‘location’:[x,y] ensureIndex({‘location’:’2d’,type:1}) find({location:{$near:[x,y]}}).limit(20) increasing distance (növekvő távolságra)
![Page 36: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/36.jpg)
Geospatial index – Quiz
Suppose you have a 2D geospatial index defined on the key location in the collection places. Write a query that will find the closest three places (the closest three documents) to the location 74, 140.
1 db.places.find({"location":{$near:[74,140]}}).limit(3) Correct
36
![Page 37: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/37.jpg)
Igazi földgömb index
Földrajzi hosszúság és szélesség. Szélesség: -90 től +90 fokig 2dsphere – 2 dimenziós gömb. geoJSON.org MongoDB o Pontok o Poligonok {nev:’Dok kafe’,varos:’Csikszereda’, ‘location’:{‘type’:’Point’,
‘coordinates’:[25.8096112,46.3550264]},type:’kavezo’} db.places.ensureIndex({‘location’:’2dsphere’})
37
![Page 38: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/38.jpg)
db.places.find({ location:{ $near:{ $geometry:{ type:’Point’, coordinates: [25.8096112,46.3550264], $maxdistance: 2000 } } } })
38
![Page 39: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/39.jpg)
Szöveges indexek
Teljes szögeben való keresés? {_id:1,”szavak”:“A kutya keresi a labdat”} db.mondatok.find({“szavak”:”kutya”}) – semmit db.mondatok.ensureIndex({“szavak”:’text’}) db.mondatok.find({$text:{$search:’kutya’}}) db.mondatok.find({$text:{$search:’keresi kutya’}}) Mennyire jó a találat? db.mondatok.find({$text:{$search:’kutya
keresi’}},{score:{$meta:’textScore’}}).sort({score:{$meta:’textScore’}})
39
![Page 40: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/40.jpg)
QUIZ – text keresés
Egy text indexet készítettünk a "title„ mezőre a movies kollekcióban, majd elvégezzük a következő szöveg keresést:
> db.movies.find( { $text : { $search : "Big Lebowski" } } ) Mely dokumentumokat fogja visszaadni, ha ezek mind a movies
kollekcióban vannak? Jelöljük be mindeniket: { "title" : "The Big Lebowski" , star: "Jeff Bridges" } { "title" : "Big" , star : "Tom Hanks" } { "title" : "Big Fish" , star: "Ewan McGregor" }
40
![Page 41: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/41.jpg)
Az index teljesítménye
Cél: jól teljesítő READ/WRITE operációk. (ír/olvas) Szelektivitás: minimalizálni a bejárt rekordokat Más opciók: hogyan kezeljük a sort utasítást? db.students.find({student_id:{$gt:500000},
class_id:54}).sort({student_id:1}).hint({class_id:1}).explain("executionstats")
totalKeysExamined nReturned – result set winningPlan rejectedPlan SORT – minél kevesebbet használjunk
41
![Page 42: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/42.jpg)
QUIZ – index teljesítmények
Általánosságba véve, mely szabályokat kell betartani, amikor összetett indexeket készítünk? A definíciókat használjuk:
equality field: mező, amelyen egyenlőségi tesztet futtatunk sort field: mező, amelyre a lekérdezés sort műveletet ad range field: mező, amelyen a lekérdezés tartományhoz való
tartozást tesztel le Sort field az equality field előtt Equality field a range field előtt Sor field a range field előtt Equality field a sort field előtt Range field az equality field előtt
42
![Page 43: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/43.jpg)
Lassú lekérdezések - profilozó >100 ms – log fájlba kiírja Profiler – system.profiler mongod –dbpath /usr/local/var/mongodb –profile 1 –slowms 2 db.system.profile.find().sort({ts:1}).pretty() db.getProfilingStatus() db.setProfilingLevel(1,4)
43
Szint 0 1 2 kikapcsolva Minden lassú lekérdezést
loggoljon MINDEN lekérdezést loggoljon
![Page 44: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/44.jpg)
QUIZ
Write the query to look in the system profile collection for all queries that took longer than one second, ordered by timestamp descending.
db.system.profile.find({millis:{$gt:1000}}).sort({ts:-1})
44
![Page 45: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/45.jpg)
Mongotop
1. Indexek kritikusak a teljesítmény szempontjából 2. Explain 3. Hint 4. Profiling Magasabb szint a Mongotop. Hol tölti el az idejét a mongo. >mongotop 3 (3 sec)
45
![Page 46: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/46.jpg)
Mongostat
1 sec – beír, lekérdez, módosít, töröl Párhúzamosan futtatni a WiredTiger-en és az mm
46
![Page 47: ABR 2( Adatbázisrendszerek 2 9. Előadás: teljesítménynövelésemte.siculorum.ro/~illyeslaszlo/ABR/ABR2/2019/... · Egy mongod szerver egyszerre csak egyetlen indexet tud a háttérben](https://reader033.vdocuments.mx/reader033/viewer/2022041811/5e57ffa8ed1f1215ec5b8fca/html5/thumbnails/47.jpg)
Sharding – szétszórt adatbázis
47