Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az indexek olyan struktúrák, amelyek a gyűjtemény mezőihez való gyors hozzáférés révén javítják az adatlekérési sebességet. Úgy működnek, hogy rendezett mutatókészletet hoznak létre az adatokhoz, gyakran kulcsmezők alapján. Az Azure DocumentDB több környezetben is használ indexeket, beleértve a lekérdezések leküldését, az egyedi korlátozásokat és a horizontális skálázást.
Important
A "_id" mező az egyetlen mező, amely alapértelmezés szerint indexelt & a mező maximális mérete lehet 2 KB. A teljesítmény optimalizálása érdekében javasoljuk, hogy további indexeket adjon hozzá lekérdezési szűrők és predikátumok alapján.
Indextípusok
Az egyszerűség kedvéért vegyünk egy példát egy blogalkalmazásra az alábbi beállítással:
-
Adatbázis neve:
cosmicworks -
Gyűjtemény neve:
products
Ez a példaalkalmazás dokumentumként tárolja a cikkeket az alábbi struktúrával. Az összes idézett példa tovább használja a gyűjtemény struktúráját.
{
"_id": ObjectId("617a34e7a867530bff1b2346"),
"title": "Azure DocumentDB - A Game Changer",
"content": "Azure DocumentDB is a globally distributed, multi-model database service.",
"author": {lastName: "Doe", firstName: "John"},
"category": "Technology",
"launchDate": ISODate("2024-06-24T10:08:20.000Z"),
"published": true
}
Egymezős indexek
Az egymezős indexek egyetlen mezőből tárolnak adatokat egy gyűjteményben. Az egymezős index rendezési sorrendje nem számít.
_id a mező alapértelmezés szerint indexelt marad.
Az Azure DocumentDB támogatja az indexek létrehozását az alábbiak szerint
- Legfelső szintű dokumentummezők.
- Beágyazott dokumentum.
- Beágyazott dokumentum mezői.
A következő parancs egyetlen mezőindexet hoz létre a mezőn author , a következő parancs pedig egy beágyazott mezőben firstNamehozza létre.
use cosmicworks
db.products.createIndex({"author": 1})
// indexing embedded property
db.products.createIndex({"author.firstName": -1})
Egy lekérdezés több egymezős indexet is használhat, ahol elérhető.
Megjegyzés:
Az Azure DocumentDB legfeljebb 64 index létrehozását teszi lehetővé egy gyűjteményen. A szinttől függően igény szerint akár 300 indexet is tervezhetünk.
Összetett indexek
Az összetett indexek hatékonyabbá teszik az adatbázis teljesítményét azáltal, hogy lehetővé teszik a dokumentumok több mezője alapján történő hatékony lekérdezést és rendezést . Ez az optimalizálás csökkenti a teljes gyűjtemények vizsgálatának szükségességét, felgyorsítva az adatlekérést és a szervezést.
Az alábbi parancs összetett indexet hoz létre a mezőkön author és launchDate ellentétes rendezési sorrendben.
use cosmicworks
db.products.createIndex({"author":1, "launchDate":-1})
Order mezők befolyásolják az index szelektivitását vagy kihasználtságát. A find lekérdezés nem használja a létrehozott indexet.
use cosmicworks
db.products.find({"launchDate": {$gt: ISODate("2024-06-01T00:00:00.000Z")}})
Limitations
- Egy összetett indexben legfeljebb 32 mező\elérési út lehet.
Részleges indexek
Olyan indexek, amelyek társított lekérdezésszűrővel rendelkeznek, amelyek azt írják le, hogy mikor kell kifejezéseket létrehozni az indexben.
use cosmicworks
db.products.createIndex (
{ "author": 1, "launchDate": 1 },
{ partialFilterExpression: { "launchDate": { $gt: ISODate("2024-06-24T10:08:20.000Z") } } }
)
Limitations
- A részleges indexek nem támogatják a(z)
ORDER BYvagyUNIQUE, hacsak a szűrő nem felel meg.
Szövegindexek
A szöveges indexek speciális adatstruktúrák, amelyek optimalizálják a szövegalapú lekérdezéseket, így gyorsabbak és hatékonyabbak.
Használja a createIndex metódust a text opcióval a title mezőn szövegindex létrehozásához.
use cosmicworks;
db.products.createIndex({ title: "text" })
Megjegyzés:
Bár gyűjteményenként csak egy szöveges indexet definiálhat, az Azure DocumentDB lehetővé teszi, hogy több mező kombinációjával szövegindexeket hozzon létre, amelyekkel szövegkereséseket végezhet a dokumentumok különböző mezőiben.
Szövegindex beállításainak konfigurálása
Az Azure DocumentDB szöveges indexei számos lehetőséget kínálnak a viselkedésük testreszabására. Megadhatja például a szövegelemzés nyelvét, beállíthatja a súlyokat bizonyos mezők rangsorolásához, és konfigurálhatja a kis- és nagybetűket nem érzékelyítő kereséseket. Íme egy példa egy szövegindex beállításokkal való létrehozására:
Hozzon létre egy indexet, amely támogatja a keresést az
titleéscontentmezőkön, angol nyelvű kereséstámogatással. Emellett rendeljen nagyobb súlyokat atitlemezőhöz, hogy rangsorolja azt a keresési eredményekben.use cosmicworks db.products.createIndex( { title: "text", content: "text" }, { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false } )
Megjegyzés:
Amikor egy ügyfél szöveges keresési lekérdezést végez a "DocumentDB" kifejezéssel, a gyűjtemény minden dokumentumának pontszáma a kifejezés jelenléte és gyakorisága alapján lesz kiszámítva mind a "cím" és a "tartalom" mezőben, mind a nagyobb súly miatt a "cím" mezőben.
Szövegkeresés végrehajtása szövegindex használatával
A szövegindex létrehozása után a lekérdezésekben a "text" operátorral végezhet szöveges keresést. A szövegoperátor egy keresési karakterláncot vesz alapul, és a szövegindex alapján releváns dokumentumokat keres ki.
Szövegkeresés végrehajtása a kifejezésre
DocumentDB.use cosmicworks db.products.find( { $text: { $search: "DocumentDB" } } )Ha szeretné, a lekérdezésben szereplő mezővel együtt használja a
$metatextScorevetítési operátort a súly megjelenítéséhezuse cosmicworks db.products.find( { $text: { $search: "DocumentDB" } }, { score: { $meta: "textScore" } } )
Limitations
- Egy gyűjteményben csak egy szöveges index definiálható.
- A rendezési műveletek nem használhatják a szöveges index sorrendjét a MongoDB-ben.
- A Hint() nem támogatott olyan lekérdezésekkel, amelyek $text kifejezést használnak.
- A szövegindexek viszonylag nagy méretűek lehetnek, és jelentős tárterületet foglalnak el más indextípusokhoz képest.
Helyettesítő karakterek indexei
Az egyetlen mező indexelése az összes elérési utat indexeli a field mező alatt, kivéve az azonos szinten lévő többi mezőt. Például a következő mintadokumentumhoz
{
"children":
{
"familyName": "Merriam",
"pets": { "details": {“name”: "Goofy", ”age”: 3} }
}
}
Index létrehozása { "pets.$**": 1 } rendszeren, indexet hoz létre a részletek & aldokumentumtulajdonságok alapján, de nem hoz létre indexet a "familyName" fájlban.
Limitations
- A helyettesítő indexek nem támogatják az egyedi indexeket.
- A wildcard indexek csak akkor támogatják a push down folyamatot
ORDER BYesetében, ha a szűrő csak a wildcard indexben található elérési utakat tartalmazza, mivel ezek nem indexelik a definiálatlan elemeket. - Az összetett helyettesítő karakter index csak egy
onehelyettesítő kifejezéssel ésonevagy több indexkifejezéssel rendelkezhet.{ "pets.$**": 1, “familyName”: 1 }
Térinformatikai indexek
A térinformatikai indexek támogatják a GeoJSON-objektumként vagy örökölt koordináta-párként tárolt adatok lekérdezéseit. Térinformatikai indexekkel javíthatja a térinformatikai adatok lekérdezéseinek teljesítményét, vagy futtathat bizonyos térinformatikai lekérdezéseket.
Az Azure DocumentDB kétféle térinformatikai indexet biztosít:
- 2dsphere indexek, amelyek támogatják a gömb geometriát értelmező lekérdezéseit.
- 2d Indexek, amelyek támogatják a geometriát egy sík felületen értelmező lekérdezéseket.
Kétdimenziós indexek
A kétdimenziós indexek csak örökölt koordinátapár-stílussal támogatottak a térinformatikai adatok tárolásához.
Használja a createIndex metódust a 2d beállítással térbeli index létrehozásához a location mezőn.
db.places.createIndex({ "location": "2d"});
Limitations
- Csak
onea hely mező lehet az2dindex része, és csakonemás nem térinformatikai mező lehet azcompound 2dindex részedb.places.createIndex({ "location": "2d", "non-geospatial-field": 1 / -1 })
2dsphere indexek
2dsphere az indexek támogatják a földszerű gömbök térinformatikai lekérdezéseit. Támogatja mind a GeoJSON-objektumokat, mind az örökölt koordináta-párokat.
2dSphere Az indexek az adatok tárolásának GeoJSON-stílusával működnek, ha régi pontokba ütköznek, akkor geojSON-ponttá alakulnak.
Használja a createIndex metódust a 2dsphere beállítással térbeli index létrehozásához a location mezőn.
db.places.createIndex({ "location": "2dsphere"});
2dsphere Az indexek lehetővé teszik az indexek létrehozását több térinformatikai és több nem térinformatikai adatmezőn.
db.places.createIndex({ "location": "2d", "non-geospatial-field": 1 / -1, ... "more non-geospatial-field": 1 / -1 })
Limitations
A normál indexet és térinformatikai indexet használó összetett indexek nem támogatottak. A térinformatikai indexek bármelyikének létrehozása hibákhoz vezetne.
// Compound Regular & 2dsphere indexes are not supported yet db.collection.createIndex({a: 1, b: "2dsphere"}) // Compound 2d indexes are not supported yet db.collection.createIndex({a: "2d", b: 1})A lyukas sokszögek nem működnek. A lyukas sokszög beszúrása nincsen korlátozva, bár
$geoWithina lekérdezés forgatókönyvekben meghiúsul.Ha magának a lekérdezésnek sokszöge van lyukakkal
coll.find( { "b": { "$geoWithin": { "$geometry": { "coordinates": [ [ [ 0, 0], [0, 10], [10, 10],[10,0],[0, 0] ], [ [5, 5], [8, 5], [ 8, 8], [ 5, 8], [ 5, 5] ] ], "type": "Polygon" } } } }) // MongoServerError: $geoWithin currently doesn't support polygons with holesHa van olyan szűretlen dokumentum, amelynek sokszöge lyukas.
[mongos] test> coll.find() [ { _id: ObjectId("667bf7560b4f1a5a5d71effa"), b: { type: 'Polygon', coordinates: [ [ [ 0, 0 ], [ 0, 10 ], [ 10, 10 ], [ 10, 0 ], [ 0, 0 ] ], [ [ 5, 5 ], [ 8, 5 ], [ 8, 8 ], [ 5, 8 ], [ 5, 5 ] ] ] } } ] // MongoServerError: $geoWithin currently doesn't support polygons with holeskeymező megadása kötelezőgeoNearhasználatakor.[mongos] test> coll.aggregate([{ $geoNear: { $near: { "type": "Point", coordinates: [0, 0] } } }]) // MongoServerError: $geoNear requires a 'key' option as a String
Következő lépések
- Megismerheti a leghatékonyabb eredmények indexelésével kapcsolatos ajánlott eljárásokat .
- Tudnivalók a háttérindexelésről
- Ebből a cikkből megtudhatja, hogyan használható a szövegindexelés.
- Itt megismerheti a wildcard indexelést.