MongoDB-bővítményparancsok használata a MongoDB-hez készült Azure Cosmos DB-ben tárolt adatok kezeléséhez

A KÖVETKEZŐKRE VONATKOZIK: MongoDB

Az alábbi dokumentum a MongoDB-hez készült Azure Cosmos DB-hez tartozó egyéni műveleti parancsokat tartalmazza. Ezek a parancsok az Azure Cosmos DB-kapacitásmodellre jellemző adatbázis-erőforrások létrehozásához és beszerzéséhez használhatók.

A MongoDB-hez készült Azure Cosmos DB használatával élvezheti az Azure Cosmos DB megosztott előnyeit. Ezek az előnyök többek között a következők:

  • Globális terjesztés
  • Automatikus horizontális skálázás
  • Magas rendelkezésre állás
  • Késési garancia
  • Titkosítás inaktív állapotban
  • Biztonsági másolatok

Ezeket az előnyöket élvezheti, miközben megtartja meglévő MongoDB-alkalmazásaiban való befektetéseit. A MongoDB-hez készült Azure Cosmos DB-vel a nyílt forráskódú MongoDB-ügyfélillesztők bármelyikével kommunikálhat. A MongoDB-hez készült Azure Cosmos DB lehetővé teszi a meglévő ügyfélillesztők használatát a MongoDB vezetékes protokolljának betartásával.

MongoDB-protokoll támogatása

A MongoDB-hez készült Azure Cosmos DB kompatibilis a MongoDB-kiszolgáló 4.0-s, 3.6-os és 3.2-es verziójával. További információ: A 4.0-s, 3.6-os és 3.2-s verziók támogatott funkciói és szintaxisa.

A következő bővítményparancsok adatbázis-kérelmeken keresztül hoznak létre és módosítanak Azure Cosmos DB-specifikus erőforrásokat:

Adatbázis létrehozása

Az adatbázisbővítmény létrehozása parancs létrehoz egy új MongoDB-adatbázist. Az adatbázis neve a parancs által use database beállított adatbázis-környezetből használható. Az alábbi táblázat a parancs paramétereit ismerteti:

Mező Típus Description
customAction string Az egyéni parancs neve. Az értéknek a következőnek kell lennie CreateDatabase: .
offerThroughput int Az adatbázison beállított kiosztott átviteli sebesség. Ezt a paramétert nem kötelező megadni.
autoScaleSettings Object Az automatikus skálázási módhoz szükséges. Ez az objektum az automatikus skálázási kapacitás módhoz társított beállításokat tartalmazza. Beállíthatja azt az maxThroughput értéket, amely leírja, hogy a gyűjtemény hány kérelemegységre növelhető dinamikusan.

Kimenet

Ha a parancs sikeres, a következő választ adja vissza:

{ "ok" : 1 }

A kimenet paramétereit az egyéni parancs alapértelmezett kimenetében tekinti meg.

Példa: Adatbázis létrehozása

Ha olyan nevű "test" adatbázist szeretne létrehozni, amely az összes alapértelmezett értéket használja, használja a következő parancsot:

use test
db.runCommand({customAction: "CreateDatabase"});

Ez a parancs adatbázisszintű átviteli sebesség nélküli adatbázist hoz létre. Ez a művelet azt jelenti, hogy az adatbázis gyűjteményeinek meg kell adniuk a használni kívánt átviteli sebességet.

Példa: Adatbázis létrehozása átviteli sebességgel

Egy nevű "test" adatbázis létrehozásához és egy 1000 kérelemegységes , adatbázisszintű kiosztott átviteli sebesség megadásához használja a következő parancsot:

use test
db.runCommand({customAction: "CreateDatabase", offerThroughput: 1000 });

Ez a parancs létrehoz egy adatbázist, és beállít egy átviteli sebességet. Az adatbázis összes gyűjteménye osztozik a beállított átviteli sebességen, kivéve, ha a gyűjtemények egy adott átviteli sebességgel lettek létrehozva.

Példa: Adatbázis létrehozása automatikus skálázási átviteli sebességgel

Egy nevű "test" adatbázis létrehozásához és egy 20 000 RU/s automatikus skálázási maximális átviteli sebesség adatbázisszinten való megadásához használja a következő parancsot:

use test
db.runCommand({customAction: "CreateDatabase", autoScaleSettings: { maxThroughput: 20000 } });

Adatbázis frissítése

Az update database extension parancs frissíti a megadott adatbázishoz társított tulajdonságokat. Az adatbázis kiosztott átviteli sebességről automatikus skálázásra való módosítása és fordítva, csak a Azure Portal támogatott. Az alábbi táblázat a parancs paramétereit ismerteti:

Mező Típus Description
customAction string Az egyéni parancs neve. Az értéknek a következőnek kell lennie UpdateDatabase: .
offerThroughput int Új kiosztott átviteli sebesség, amelyet az adatbázison szeretne beállítani, ha az adatbázis adatbázisszintű átviteli sebességet használ
autoScaleSettings Object Az automatikus skálázási módhoz szükséges. Ez az objektum az automatikus skálázási kapacitás módhoz társított beállításokat tartalmazza. Beállíthatja azt az maxThroughput értéket, amely leírja, hogy az adatbázis hány kérelemegységre növelhető dinamikusan.

Ez a parancs a munkamenet kontextusában megadott adatbázist használja. Ez az adatbázis ugyanaz, mint amelyet a use <database> parancsban használt. Az adatbázis neve jelenleg nem módosítható ezzel a paranccsal.

Kimenet

Ha a parancs sikeres, a következő választ adja vissza:

{ "ok" : 1 }

A kimenet paramétereit az egyéni parancs alapértelmezett kimenetében tekinti meg.

Példa: Az adatbázishoz társított kiosztott átviteli sebesség frissítése

Ha egy adatbázis "test" kiosztott átviteli sebességét 1200 kérelemegységre szeretné frissíteni, használja a következő parancsot:

use test
db.runCommand({customAction: "UpdateDatabase", offerThroughput: 1200 });

Példa: Az adatbázishoz társított automatikus skálázási átviteli sebesség frissítése

Ha egy nevű "test" adatbázis kiosztott átviteli sebességét 20 000 kérelemegységre szeretné frissíteni, vagy automatikus skálázási átviteli sebességszintté szeretné alakítani, használja a következő parancsot:

use test
db.runCommand({customAction: "UpdateDatabase", autoScaleSettings: { maxThroughput: 20000 } });

Adatbázis lekérése

Az adatbázis-bővítmény lekérése parancs visszaadja az adatbázis-objektumot. Az adatbázis nevét abból az adatbázis-környezetből használja, amelyen a parancsot végrehajtja.

{
  customAction: "GetDatabase"
}

Az alábbi táblázat a parancs paramétereit ismerteti:

Mező Típus Description
customAction string Az egyéni parancs neve. Az értéknek a következőnek kell lennie GetDatabase: .

Kimenet

Ha a parancs sikeres, a válasz egy dokumentumot tartalmaz a következő mezőkkel:

Mező Típus Description
ok int A válasz állapota. 1 == siker. 0 == hiba.
database string Az adatbázis neve.
provisionedThroughput int Az adatbázison beállított kiosztott átviteli sebesség, ha az adatbázis manuális adatbázisszintű átviteli sebességet használ
autoScaleSettings Object Ez az objektum tartalmazza az adatbázishoz társított kapacitásparamétereket, ha automatikus skálázási módot használ. Az maxThroughput érték azt a legtöbb kérelemegységet írja le, amellyel az adatbázis dinamikusan növelhető.

Ha a parancs sikertelen, a rendszer egy alapértelmezett egyéni parancsválaszt ad vissza. Tekintse meg az egyéni parancs alapértelmezett kimenetét a kimenet paramétereihez.

Példa: Az adatbázis lekérése

Egy nevű "test"adatbázis adatbázis-objektumának lekéréséhez használja a következő parancsot:

use test
db.runCommand({customAction: "GetDatabase"});

Ha az adatbázis nem rendelkezik társított átviteli sebességgel, a kimenet a következő lesz:

{ "database" : "test", "ok" : 1 }

Ha az adatbázishoz adatbázisszintű manuális átviteli sebesség van társítva, a kimenet a provisionedThroughput következő értékeket jeleníti meg:

{ "database" : "test", "provisionedThroughput" : 20000, "ok" : 1 }

Ha az adatbázishoz adatbázisszintű automatikus skálázási átviteli sebesség van társítva, a kimenetben a provisionedThroughput, amely az adatbázis minimális RU/s-ját írja le, és az autoScaleSettings objektumot is beleértve maxThroughput, amely az adatbázis maximális RU/s-ját írja le.

{
        "database" : "test",
        "provisionedThroughput" : 2000,
        "autoScaleSettings" : {
                "maxThroughput" : 20000
        },
        "ok" : 1
}

Gyűjtemény létrehozása

A gyűjteménybővítmény létrehozása parancs létrehoz egy új MongoDB-gyűjteményt. Az adatbázis nevét a parancs által use database beállított adatbázis-környezet használja. A CreateCollection parancs formátuma a következő:

{
  customAction: "CreateCollection",
  collection: "<Collection Name>",
  shardKey: "<Shard key path>",
  // Replace the line below with "autoScaleSettings: { maxThroughput: (int) }" to use Autoscale instead of Provisioned Throughput. Fill the required Autoscale max throughput setting.
  offerThroughput: (int) // Provisioned Throughput enabled with required throughput amount set.
  indexes: [{key: {_id: 1}, name: "_id_1"}, ... ] // Optional indexes (3.6+ accounts only).
}

Az alábbi táblázat a parancs paramétereit ismerteti:

Mező Típus Kötelező Leírás
customAction string Kötelező Az egyéni parancs neve. Az értéknek a következőnek kell lennie CreateCollection: .
collection string Kötelező A gyűjtemény neve. Nem engedélyezett speciális karakterek vagy szóközök használata.
offerThroughput int Választható Kiosztott átviteli sebesség az adatbázison való beállításhoz. Ha ez a paraméter nincs megadva, alapértelmezés szerint a minimum 400 RU/s lesz. * A 10 000 RU/s-on túli átviteli sebesség megadásához a shardKey paraméterre van szükség.
shardKey string Nagy átviteli sebességgel rendelkező gyűjteményekhez szükséges A szegmenses gyűjtemény szegmenskulcsának elérési útja. Ez a paraméter akkor szükséges, ha több mint 10 000 RU/s értéket állít be a fájlban offerThroughput. Ha meg van adva, minden beszúrt dokumentumnak szüksége van erre a kulcsra és értékre.
autoScaleSettings Object Automatikus skálázási módhoz szükséges Ez az objektum az automatikus skálázási kapacitás módhoz társított beállításokat tartalmazza. Beállíthatja azt az maxThroughput értéket, amely leírja, hogy a gyűjtemény hány kérelemegységre növelhető dinamikusan.
indexes Array Az indexek konfigurálásához szükség van az indexek konfigurálására. Ez a paraméter csak 3,6+-os fiókok esetén támogatott. Ha jelen van, indexre van szükség a _id. A tömb minden bejegyzésének tartalmaznia kell egy vagy több mező kulcsát, egy nevet, és tartalmazhat indexbeállításokat. Ha például összetett egyedi indexet szeretne létrehozni a mezőkön a , és b használja ezt a bejegyzést: {key: {a: 1, b: 1}, name:"a_1_b_1", unique: true}.

Kimenet

Egy alapértelmezett egyéni parancsválaszt ad vissza. Tekintse meg az egyéni parancs alapértelmezett kimenetét a kimenet paramétereihez.

Példa: Gyűjtemény létrehozása a minimális konfigurációval

Ha új gyűjteményt szeretne létrehozni a névvel "testCollection" és az alapértelmezett értékekkel, használja a következő parancsot:

use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection"});

Ez a művelet egy új rögzített, skálázatlan gyűjteményt eredményez, amely 400RU/s értéket és automatikusan létrehoz egy indexet a _id mezőn. Ez a konfigurációtípus akkor is érvényes, ha új gyűjteményeket hoz létre a insert() függvényen keresztül. Például:

use test
db.newCollection.insert({});

Példa: Szegmens nélküli gyűjtemény létrehozása

Ha egy 1000 kérelemegységet tartalmazó névvel "testCollection" és kiosztott átviteli sebességgel rendelkező, szegmens nélküli gyűjteményt szeretne létrehozni, használja a következő parancsot:

use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection", offerThroughput: 1000});

Akár 10 000 RU/s-os offerThroughput gyűjteményt is létrehozhat anélkül, hogy szegmenskulcsot kellene megadnia. A nagyobb átviteli sebességgel rendelkező gyűjtemények esetében tekintse meg a következő szakaszt.

Példa: Szegmenses gyűjtemény létrehozása

Ha egy 11 000 kérelemegységet és egy shardkey "a.b" tulajdonságot tartalmazó, 11 000 kérelemegységet "testCollection" tartalmazó, horizontálisan elosztott gyűjteményt szeretne létrehozni, használja a következő parancsot:

use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection", offerThroughput: 11000, shardKey: "a.b" });

Ehhez a parancshoz most már szükség van a shardKey paraméterre, mivel a paraméterben offerThroughputtöbb mint 10 000 RU/s van megadva.

Példa: Szegmens nélküli automatikus skálázási gyűjtemény létrehozása

Ha létre szeretne hozni egy 4000 RU/s-ra beállított automatikus skálázási átviteli kapacitást használó, elnevezett'testCollection', szegmens nélküli gyűjteményt, használja a következő parancsot:

use test
db.runCommand({ 
    customAction: "CreateCollection", collection: "testCollection", 
    autoScaleSettings:{
      maxThroughput: 4000
    } 
});

autoScaleSettings.maxThroughput Az értékhez 4000 RU/s és 10 000 RU/s közötti tartományt adhat meg szegmenskulcs nélkül. A nagyobb automatikus skálázási sebességhez meg kell adnia a paramétert shardKey .

Példa: Horizontális automatikus skálázási gyűjtemény létrehozása

Ha egy nevű, 20 000 RU/s értékű automatikus skálázási átviteli kapacitást használó szegmenskulccsal 'a.b'rendelkező'testCollection', skálázott gyűjteményt szeretne létrehozni, használja a következő parancsot:

use test
db.runCommand({customAction: "CreateCollection", collection: "testCollection", shardKey: "a.b", autoScaleSettings: { maxThroughput: 20000 }});

Gyűjtemény frissítése

A frissítésgyűjtemény bővítmény parancsa frissíti a megadott gyűjteményhez társított tulajdonságokat. A gyűjteményt a kiosztott átviteli sebességről az automatikus skálázásra és fordítva csak a Azure Portal támogatja.

{
  customAction: "UpdateCollection",
  collection: "<Name of the collection that you want to update>",
  // Replace the line below with "autoScaleSettings: { maxThroughput: (int) }" if using Autoscale instead of Provisioned Throughput. Fill the required Autoscale max throughput setting. Changing between Autoscale and Provisioned throughput is only supported in the Azure Portal.
  offerThroughput: (int) // Provisioned Throughput enabled with required throughput amount set.
  indexes: [{key: {_id: 1}, name: "_id_1"}, ... ] // Optional indexes (3.6+ accounts only).
}

Az alábbi táblázat a parancs paramétereit ismerteti:

Mező Típus Description
customAction string Az egyéni parancs neve. Az értéknek a következőnek kell lennie UpdateCollection: .
collection string A gyűjtemény neve.
offerThroughput int Kiosztott átviteli sebesség a gyűjteményen való beállításhoz.
autoScaleSettings Object Az automatikus skálázási módhoz szükséges. Ez az objektum az automatikus skálázási kapacitás módhoz társított beállításokat tartalmazza. Az maxThroughput érték azt írja le, hogy a gyűjtemény hány kérelemegységre növelhető dinamikusan.
indexes Array Az indexek konfigurálásához szükség van az indexek konfigurálására. Ez a paraméter csak 3,6+-os fiókok esetén támogatott. Ha jelen van, a megadott indexek halmaza (beleértve az indexek eltávolítását is) felváltja a gyűjtemény meglévő indexeit. Indexre van szükség a _id. A tömb minden bejegyzésének tartalmaznia kell egy vagy több mező kulcsát, egy nevet, és tartalmazhat indexbeállításokat. Ha például egy összetett egyedi indexet szeretne létrehozni az a és b mezőkben, használja a következő bejegyzést: {key: {a: 1, b: 1}, name: "a_1_b_1", unique: true}.

Kimenet

Egy alapértelmezett egyéni parancsválaszt ad vissza. Tekintse meg az egyéni parancs alapértelmezett kimenetét a kimenet paramétereihez.

Példa: A gyűjteményhez társított kiosztott átviteli sebesség frissítése

Ha egy gyűjtemény "testCollection" kiosztott átviteli sebességét 1200 kérelemegységre szeretné frissíteni, használja a következő parancsot:

use test
db.runCommand({customAction: "UpdateCollection", collection: "testCollection", offerThroughput: 1200 });

Gyűjtemény lekérése

Az egyéni gyűjtemény lekérése parancs visszaadja a gyűjteményobjektumot.

{
  customAction: "GetCollection",
  collection: "<Name of the collection>"
}

Az alábbi táblázat a parancs paramétereit ismerteti:

Mező Típus Description
customAction string Az egyéni parancs neve. Az értéknek a következőnek kell lennie GetCollection: .
collection string A gyűjtemény neve.

Kimenet

Ha a parancs sikeres, a válasz tartalmaz egy dokumentumot a következő mezőkkel

Mező Típus Description
ok int A válasz állapota. 1 == siker. 0 == hiba.
database string Az adatbázis neve.
collection string A gyűjtemény neve.
shardKeyDefinition document Szegmenskulcsként használt indexspecifikációs dokumentum. Ez a mező nem kötelező válaszparaméter.
provisionedThroughput int Kiosztott átviteli sebesség a gyűjteményhez való beállításhoz. Ez a mező nem kötelező válaszparaméter.
autoScaleSettings Object Ez az objektum tartalmazza az adatbázishoz társított kapacitásparamétereket, ha automatikus skálázási módot használ. Az maxThroughput érték azt a legtöbb kérelemegységet írja le, amellyel a gyűjtemény dinamikusan növelhető.

Ha a parancs sikertelen, a rendszer egy alapértelmezett egyéni parancsválaszt ad vissza. A kimenet paramétereit az egyéni parancs alapértelmezett kimenetében tekinti meg.

Példa: A gyűjtemény lekérése

A nevű "testCollection"gyűjtemény gyűjteményobjektumának lekéréséhez használja a következő parancsot:

use test
db.runCommand({customAction: "GetCollection", collection: "testCollection"});

Ha a gyűjtemény rendelkezik társított átviteli kapacitással, akkor az provisionedThroughput értéket is tartalmazza, és a kimenet a következő lesz:

{
        "database" : "test",
        "collection" : "testCollection",
        "provisionedThroughput" : 400,
        "ok" : 1
}

Ha a gyűjteményhez tartozik automatikus skálázási átviteli sebesség, akkor a autoScaleSettings paraméterrel rendelkező maxThroughput objektumot is tartalmazza, amely meghatározza a gyűjtemény által dinamikusan megnövelt maximális átviteli sebességet. Emellett az provisionedThroughput értéket is tartalmazza, amely meghatározza a gyűjtemény által minimálisan csökkentett átviteli sebességet, ha nincsenek kérések a gyűjteményben:

{
        "database" : "test",
        "collection" : "testCollection",
        "provisionedThroughput" : 1000,
        "autoScaleSettings" : {
            "maxThroughput" : 10000
        },
        "ok" : 1
}

Ha a gyűjtemény adatbázisszintű átviteli sebességet oszt meg automatikus skálázási módban vagy manuális módon, a kimenet a következő lesz:

{ "database" : "test", "collection" : "testCollection", "ok" : 1 }
{
        "database" : "test",
        "provisionedThroughput" : 2000,
        "autoScaleSettings" : {
            "maxThroughput" : 20000
        },
        "ok" : 1
}

Változásstreamek párhuzamosítása

Változásstreamek nagy léptékű használata esetén a legjobb, ha egyenletesen elosztja a terhelést. A következő parancs egy vagy több változásfolyam-folytatási jogkivonatot ad vissza – mindegyik egyetlen fizikai szegmens/partíció adatainak felel meg (több logikai szegmens/partíció is létezhet egy fizikai partíción). Minden folytatási jogkivonat miatt a watch() csak az adott fizikai szegmensből/partícióból ad vissza adatokat.

Az db.collection.watch() egyes folytatási jogkivonatokon (tokenenként egy szálon) hatékonyan skálázhatja a változásstreameket.

{
        customAction: "GetChangeStreamTokens", 
        collection: "<Name of the collection>", 
        startAtOperationTime: "<BSON Timestamp>" // Optional. Defaults to the time the command is run.
} 

Példa: A stream jogkivonatának lekérése

Futtassa az egyéni parancsot az egyes fizikai szegmensek/partíciók folytatási jogkivonatának lekéréséhez.

use test
db.runCommand({customAction: "GetChangeStreamTokens", collection: "<Name of the collection>"})

Futtasson egy watch() szálat/folyamatot a GetChangeStreamTokens egyéni parancsból visszaadott minden folytatási jogkivonathoz. Íme egy példa egy szálra.

db.test_coll.watch([{ $match: { "operationType": { $in: ["insert", "update", "replace"] } } }, { $project: { "_id": 1, "fullDocument": 1, "ns": 1, "documentKey": 1 } }], 
{fullDocument: "updateLookup", 
resumeAfter: { "_data" : BinData(0,"eyJWIjoyLCJSaWQiOiJQeFVhQUxuMFNLRT0iLCJDb250aW51YXRpb24iOlt7IkZlZWRSYW5nZSI6eyJ0eXBlIjoiRWZmZWN0aXZlIFBhcnRpdGlvbiBLZXkgUmFuZ2UiLCJ2YWx1ZSI6eyJtaW4iOiIiLCJtYXgiOiJGRiJ9fSwiU3RhdGUiOnsidHlwZSI6ImNvbnRpbndkFLbiIsInZhbHVlIjoiXCIxODQ0XCIifX1dfQ=="), "_kind" : NumberInt(1)}})

A resumeAfter mezőben lévő dokumentum (érték) az önéletrajz jogkivonatát jelöli. A parancs watch() a GetChangeStreamTokens egyéni parancs futtatása óta az adott fizikai partícióból beszúrt, frissített vagy lecserélt összes dokumentumra vonatkozóan egy átkot ad vissza. A visszaadott adatok mintáját itt találja.

{
  "_id": {
    "_data": BinData(0,
    "eyJWIjoyLCJSaWQiOiJQeFVhQUxuMFNLRT0iLCJDfdsfdsfdsft7IkZlZWRSYW5nZSI6eyJ0eXBlIjoiRWZmZWN0aXZlIFBhcnRpdGlvbiBLZXkgUmFuZ2UiLCJ2YWx1ZSI6eyJtaW4iOiIiLCJtYXgiOiJGRiJ9fSwiU3RhdGUiOnsidHlwZSI6ImNvbnRpbnVhdGlvbiIsInZhbHVlIjoiXCIxOTgwXCIifX1dfQ=="),
    "_kind": 1
  },
  "fullDocument": {
    "_id": ObjectId("60da41ec9d1065b9f3b238fc"),
    "name": John,
    "age": 6
  },
  "ns": {
    "db": "test-db",
    "coll": "test_coll"
  },
  "documentKey": {
    "_id": ObjectId("60da41ec9d1065b9f3b238fc")
  }
}

Minden visszaadott dokumentum tartalmaz egy folytatási jogkivonatot (minden oldal esetében megegyeznek). Ezt az önéletrajz-jogkivonatot tárolni kell, és újra fel kell használni, ha a szál/folyamat meghal. Ez a folytatási jogkivonat onnan veszi fel a műveletet, ahol abbahagyta, és csak az adott fizikai partícióról fogad adatokat.

Egyéni parancs alapértelmezett kimenete

Ha nincs megadva, az egyéni válasz a következő mezőket tartalmazó dokumentumot tartalmazza:

Mező Típus Description
ok int A válasz állapota. 1 == siker. 0 == hiba.
code int Csak akkor adja vissza, ha a parancs meghiúsult (vagyis ok == 0). A MongoDB hibakódját tartalmazza. Ez a mező nem kötelező válaszparaméter.
errMsg string Csak akkor adja vissza, ha a parancs meghiúsult (vagyis ok == 0). Felhasználóbarát hibaüzenetet tartalmaz. Ez a mező nem kötelező válaszparaméter.

Például:

{ "ok" : 1 }

Következő lépések

A következő lépésben megismerheti az Azure Cosmos DB következő fogalmait: