abr 2( adatbázisrendszerek 2 9. előadás:...

47
1 Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 9. Előadás: teljesítménynövelés

Upload: others

Post on 21-Feb-2020

0 views

Category:

Documents


0 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sharding – szétszórt adatbázis

47