Nem particionált tárolók migrálása particionált tárolókba
A KÖVETKEZŐRE VONATKOZIK: NoSQL
Az Azure Cosmos DB támogatja a tárolók partíciókulcs nélküli létrehozását. Jelenleg nem particionált tárolókat hozhat létre az Azure CLI és az Azure Cosmos DB SDK-k (.NET, Java, NodeJs) használatával, amelyek 2.x-nél kisebb vagy annál kisebb verziójúak. Nem particionált tárolók nem hozhatók létre a Azure Portal használatával. Az ilyen nem particionált tárolók azonban nem rugalmasak, és rögzített tárolókapacitásuk 20 GB, átviteli sebességük pedig 10 000 RU/s.
A nem particionált tárolók örököltek, és a meglévő nem particionált tárolókat particionált tárolókba kell migrálni a tároló és az átviteli sebesség skálázásához. Az Azure Cosmos DB rendszeralapú mechanizmust biztosít a nem particionált tárolók particionált tárolókba való migrálásához. Ez a dokumentum azt ismerteti, hogy az összes meglévő nem particionált tároló automatikusan migrálva lesz particionált tárolókba. Az automatikus migrálási funkciót csak akkor használhatja, ha az SDK-k V3 verzióját használja az összes nyelven.
Megjegyzés
Jelenleg nem migrálhatja a Gremlin-fiókokhoz készült Azure Cosmos DB MongoDB-t és API-t a jelen dokumentumban leírt lépések végrehajtásával.
Tároló migrálása a rendszer által definiált partíciókulcs használatával
A migrálás támogatásához az Azure Cosmos DB egy nevű, rendszer által definiált partíciókulcsot /_partitionkey
biztosít az összes olyan tárolón, amely nem rendelkezik partíciókulcstal. A tárolók migrálása után nem módosítható a partíciókulcs definíciója. A particionált tárolóba migrált tároló definíciója például a következő lesz:
{
"Id": "CollId"
"partitionKey": {
"paths": [
"/_partitionKey"
],
"kind": "Hash"
},
}
A tároló migrálása után dokumentumokat hozhat létre a _partitionKey
tulajdonság és a dokumentum egyéb tulajdonságainak feltöltésével. A _partitionKey
tulajdonság a dokumentumok partíciókulcsát jelöli.
A megfelelő partíciókulcs kiválasztása fontos a kiosztott átviteli sebesség optimális kihasználásához. További információt a partíciókulcs kiválasztásáról szóló cikkben talál.
Megjegyzés
A rendszer által definiált partíciókulcsot csak akkor használhatja ki, ha az SDK-k legújabb/V3 verzióját használja az összes nyelven.
Az alábbi példa egy mintakódot mutat be, amely létrehoz egy dokumentumot a rendszer által definiált partíciókulccsal, és beolvassa a dokumentumot:
A dokumentum JSON-ábrázolása
DeviceInformationItem = new DeviceInformationItem
{
"id": "elevator/PugetSound/Building44/Floor1/1",
"deviceId": "3cf4c52d-cc67-4bb8-b02f-f6185007a808",
"_partitionKey": "3cf4c52d-cc67-4bb8-b02f-f6185007a808"
}
public class DeviceInformationItem
{
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "deviceId")]
public string DeviceId { get; set; }
[JsonProperty(PropertyName = "_partitionKey", NullValueHandling = NullValueHandling.Ignore)]
public string PartitionKey { get {return this.DeviceId; set; }
}
CosmosContainer migratedContainer = database.Containers["testContainer"];
DeviceInformationItem deviceItem = new DeviceInformationItem() {
Id = "1234",
DeviceId = "3cf4c52d-cc67-4bb8-b02f-f6185007a808"
}
ItemResponse<DeviceInformationItem > response =
await migratedContainer.CreateItemAsync<DeviceInformationItem>(
deviceItem.PartitionKey,
deviceItem
);
// Read back the document providing the same partition key
ItemResponse<DeviceInformationItem> readResponse =
await migratedContainer.ReadItemAsync<DeviceInformationItem>(
partitionKey: deviceItem.PartitionKey,
id: device.Id
);
A teljes mintát a .NET-minták GitHub-adattárában találja.
A dokumentumok migrálása
Bár a tárolódefiníció egy partíciókulcs-tulajdonsággal van bővítve, a tárolóban lévő dokumentumok nem lesznek automatikusan migrálva. Ez azt jelenti, hogy a rendszerpartíciókulcs tulajdonságútvonala /_partitionKey
nem lesz automatikusan hozzáadva a meglévő dokumentumokhoz. A meglévő dokumentumok újraparticionálásához olvassa el a partíciókulcs nélkül létrehozott dokumentumokat, majd írja vissza őket a dokumentumokban lévő tulajdonsággal _partitionKey
.
Olyan dokumentumok elérése, amelyek nem rendelkeznek partíciókulcsokkal
Az alkalmazások a "PartitionKey.None" nevű speciális rendszertulajdonság használatával érhetik el a partíciókulcsot nem tartalmazó meglévő dokumentumokat. Ez a nem migrált dokumentumok értéke. Ezt a tulajdonságot az összes CRUD- és lekérdezési műveletben használhatja. Az alábbi példa egy olyan mintát mutat be, amely egyetlen dokumentumot olvas be a NonePartitionKey elemből.
CosmosItemResponse<DeviceInformationItem> readResponse =
await migratedContainer.Items.ReadItemAsync<DeviceInformationItem>(
partitionKey: PartitionKey.None,
id: device.Id
);
Kompatibilitás SDK-kkal
Az Azure Cosmos DB SDK-k régebbi verziói, például a V2.x.x és a V1.x.x nem támogatják a rendszer által definiált partíciókulcs-tulajdonságot. Ha tehát egy régebbi SDK-ból olvassa be a tárolódefiníciót, az nem tartalmaz partíciókulcs-definíciót, és ezek a tárolók pontosan ugyanúgy fognak viselkedni, mint korábban. Az SDK-k régebbi verziójával készült alkalmazások továbbra is nem particionáltakkal működnek, ahogyan a módosítások nélkül is.
Ha egy migrált tárolót az SDK legújabb/V3 verziója használ, és elkezdi felemészteni a rendszer által definiált partíciókulcsot az új dokumentumokban, többé nem érheti el (olvasás, frissítés, törlés, lekérdezés) az ilyen dokumentumokat a régebbi SDK-kból.
Ismert problémák
A partíciókulcs nélkül beszúrt elemek számának lekérdezése v3 SDK használatával nagyobb átviteli sebességet igényelhet
Ha a V3 SDK-ból kérdezi le a V2 SDK-val beszúrt elemeket, vagy a V3 SDK paraméterrel PartitionKey.None
beszúrt elemeket, a számláló lekérdezés több RU/s-t használhat, ha a PartitionKey.None
paraméter a FeedOptionsban van megadva. Azt javasoljuk, hogy ne adja meg a PartitionKey.None
paramétert, ha más elemek nincsenek beszúrva partíciókulccsal.
Ha a partíciókulcshoz különböző értékeket tartalmazó új elemek vannak beszúrva, az ilyen elemek számának lekérdezése a megfelelő kulcs FeedOptions
átadásával nem okoz problémát. Ha új dokumentumokat szúr be partíciókulccsal, ha csak a dokumentumszámot kell lekérdeznie a partíciókulcs értéke nélkül, akkor a lekérdezés a szokásos particionált gyűjteményekhez hasonló ru/s értéket eredményezhet.
Következő lépések
- Particionálás az Azure Cosmos DB-ben
- Az Azure Cosmos DB kérelemegységei
- Átviteli sebesség kiosztása tárolókra és adatbázisokra
- Azure Cosmos DB-fiók használata
- Kapacitástervezést szeretne végezni az Azure Cosmos DB-be való migráláshoz?
- Ha csak annyit tud, hogy hány virtuális mag és kiszolgáló található a meglévő adatbázisfürtben, olvassa el a kérelemegységek becslését virtuális magok vagy vCPU-k használatával
- Ha ismeri az aktuális adatbázis számítási feladatainak tipikus kérési arányait, olvassa el a kérelemegységek becslését az Azure Cosmos DB kapacitástervezővel