Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ez az oktatóanyag bemutatja, hogyan hozhat létre egy .NET-konzolalkalmazást, amely optimalizálja az adatok Azure Cosmos DB-be való importálásához szükséges kiépített átviteli sebességet (RU/s).
Ebben a cikkben egy mintaadatforrásból származó adatokat olvas be, és importálja őket egy Azure Cosmos DB-tárolóba.
Ez az oktatóanyag az alábbiakkal foglalkozik:
- Azure Cosmos DB-fiók létrehozása
- A projekt konfigurálása
- Csatlakozás az Azure Cosmos DB-fiókhoz csoportos műveletek támogatásával ellátva.
- Adatimportálás végrehajtása egyidejű létrehozási műveletekkel
Előfeltételek
A cikk utasításainak követése előtt győződjön meg arról, hogy rendelkezik a következő erőforrásokkal:
Aktív Azure-fiók. Ha nincs Azure-előfizetésed, hozz létre egy ingyenes fiókot mielőtt elkezdenéd.
Ingyenes szintű Azure Cosmos DB-fiókot hozhat létre az első 1000 RU/s és 25 GB tárterülettel ingyenesen. Az Azure Cosmos DB emulátort az URI-val is használhatja
https://localhost:8081. Az emulátorhoz használandó kulcsról a kérelmek hitelesítése című témakörben olvashat.NET Core 3 SDK. A környezetben elérhető verziót a futtatással
dotnet --versionellenőrizheti.
Ez az oktatóanyag az Azure Cosmos DB .NET SDK 3.0-s vagy újabb verzióját használja, amely .NET-keretrendszer vagy .NET Core-ra célozható.
1. lépés: Azure Cosmos DB-fiók létrehozása
Hozzon létre egy Azure Cosmos DB for NoSQL-fiókot az Azure Portalról, vagy hozza létre a fiókot az Azure Cosmos DB Emulator használatával.
2. lépés: A .NET-projekt beállítása
Nyissa meg a Windows parancssort vagy egy terminálablakot a helyi számítógépről. A parancssorból vagy a terminálból a következő szakaszokban futtatja az összes parancsot. Futtassa a következő dotnet new parancsot egy új alkalmazás bulk-import-demo néven való létrehozásához.
dotnet new console -n bulk-import-demo
Módosítsa a könyvtárat az újonnan létrehozott alkalmazásmappára. Az alkalmazást a következőkkel hozhatja létre:
cd bulk-import-demo
dotnet build
A build várt kimenetének a következőképpen kell kinéznie:
Restore completed in 100.37 ms for C:\Users\user1\Downloads\CosmosDB_Samples\bulk-import-demo\bulk-import-demo.csproj.
bulk -> C:\Users\user1\Downloads\CosmosDB_Samples\bulk-import-demo \bin\Debug\netcoreapp2.2\bulk-import-demo.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:34.17
3. lépés: Az Azure Cosmos DB-csomag hozzáadása
Amíg továbbra is az alkalmazáskönyvtárban van, telepítse a .NET Core-hoz készült Azure Cosmos DB-ügyfélkódtárat a dotnet add package paranccsal.
dotnet add package Microsoft.Azure.Cosmos
4. lépés: Az Azure Cosmos DB-fiók hitelesítő adatainak lekérése
A mintaalkalmazásnak hitelesítenie kell magát az Azure Cosmos DB-fiókban. A hitelesítéshez át kell adnia az Azure Cosmos DB-fiók hitelesítő adatait az alkalmazásnak. Az alábbi lépések végrehajtásával szerezze be az Azure Cosmos DB-fiók hitelesítő adatait:
- Jelentkezzen be a Azure portalra.
- Navigáljon az Azure Cosmos DB-fiókjába.
- Nyissa meg a Kulcsok panelt, és másolja ki a fiók URI-ját és ELSŐDLEGES KULCSát .
Ha az Azure Cosmos DB Emulatort használja, szerezze be az emulátor hitelesítő adatait.
5. lépés: A CosmosClient objektum inicializálása tömeges végrehajtás támogatásával
Nyissa meg a létrehozott Program.cs fájlt egy kódszerkesztőben. Hozzon létre egy új példányt, amelyen engedélyezve van a CosmosClient tömeges végrehajtás, és használja az Azure Cosmos DB-vel végzett műveletek végrehajtására.
Először írja felül az alapértelmezett Main metódust, és határozza meg a globális változókat. Ezek a globális változók tartalmazzák a végpontot és az engedélyezési kulcsokat, az adatbázis nevét, a létrehozandó tárolót, valamint a tömegesen beszúrni kívánt elemek számát. Ügyeljen arra, hogy a környezetnek megfelelően cserélje le az endpointURL és az engedélyezési kulcs értékeit.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Azure.Cosmos;
public class Program
{
private const string EndpointUrl = "https://<your-account>.documents.azure.com:443/";
private const string AuthorizationKey = "<your-account-key>";
private const string DatabaseName = "bulk-tutorial";
private const string ContainerName = "items";
private const int AmountToInsert = 300000;
static async Task Main(string[] args)
{
}
}
A metóduson Main belül adja hozzá a következő kódot a CosmosClient objektum inicializálásához:
CosmosClient cosmosClient = new CosmosClient(EndpointUrl, AuthorizationKey, new CosmosClientOptions() { AllowBulkExecution = true });
Megjegyzés:
Ha a CosmosClientOptionsban a tömeges végrehajtás meg van adva, azok gyakorlatilag nem módosíthatók a CosmosClient élettartama során. Az értékek módosítása nincs hatással.
A tömeges végrehajtás engedélyezése után a CosmosClient belsőleg egyetlen szolgáltatáshívásba csoportosítja az egyidejű műveleteket. Így optimalizálja az átviteli sebesség kihasználtságát azáltal, hogy elosztja a szolgáltatáshívásokat a partíciók között, és végül egyedi eredményeket rendel az eredeti hívókhoz.
Ezután létrehozhat egy tárolót az összes elem tárolásához. Definiálja /pk a partíciókulcsot, az 50000 RU/s-t kiosztott átviteli sebességként, valamint egy egyéni indexelési szabályzatot, amely kizárja az összes mezőt az írási átviteli sebesség optimalizálásához. Adja hozzá a következő kódot a CosmosClient inicializálási utasítása után:
Database database = await cosmosClient.CreateDatabaseIfNotExistsAsync(Program.DatabaseName);
await database.DefineContainer(Program.ContainerName, "/pk")
.WithIndexingPolicy()
.WithIndexingMode(IndexingMode.Consistent)
.WithIncludedPaths()
.Attach()
.WithExcludedPaths()
.Path("/*")
.Attach()
.Attach()
.CreateAsync(50000);
6. lépés: Az egyidejű tevékenységek listájának feltöltése
A tömeges végrehajtás támogatásának kihasználásához hozzon létre egy listát az aszinkron feladatokról az adatforrás és a végrehajtandó műveletek alapján, és használja Task.WhenAll őket egyidejűleg.
Kezdjük a Bogus-adatok használatával az adatmodell elemeinek listájának létrehozásához. Egy valós alkalmazásban az elemek a kívánt adatforrásból származnak.
Először adja hozzá a hamis csomagot a megoldáshoz a dotnet add package paranccsal.
dotnet add package Bogus
Adja meg a menteni kívánt elemek definícióját. Meg kell határoznia az osztályt Item a Program.cs fájlban:
public class Item
{
public string id {get;set;}
public string pk {get;set;}
public string username{get;set;}
}
Ezután hozzon létre egy segédfüggvényt az Program osztályon belül. Ez a segédfüggvény lekéri a véletlenszerű adatok beszúrásához és generálásához definiált elemek számát:
private static IReadOnlyCollection<Item> GetItemsToInsert()
{
return new Bogus.Faker<Item>()
.StrictMode(true)
//Generate item
.RuleFor(o => o.id, f => Guid.NewGuid().ToString()) //id
.RuleFor(o => o.username, f => f.Internet.UserName())
.RuleFor(o => o.pk, (f, o) => o.id) //partitionkey
.Generate(AmountToInsert);
}
A segédfüggvény használatával inicializálhatja a dokumentumok listáját, amelyekkel dolgozhat:
IReadOnlyCollection<Item> itemsToInsert = Program.GetItemsToInsert();
Ezután a dokumentumok listájával egyidejű tevékenységeket hozhat létre, és feltöltheti a feladatlistát, hogy beszúrja az elemeket a tárolóba. A művelet végrehajtásához adja hozzá a következő kódot az Program osztályhoz:
Container container = database.GetContainer(ContainerName);
List<Task> tasks = new List<Task>(AmountToInsert);
foreach (Item item in itemsToInsert)
{
tasks.Add(container.CreateItemAsync(item, new PartitionKey(item.pk))
.ContinueWith(itemResponse =>
{
if (!itemResponse.IsCompletedSuccessfully)
{
AggregateException innerExceptions = itemResponse.Exception.Flatten();
if (innerExceptions.InnerExceptions.FirstOrDefault(innerEx => innerEx is CosmosException) is CosmosException cosmosException)
{
Console.WriteLine($"Received {cosmosException.StatusCode} ({cosmosException.Message}).");
}
else
{
Console.WriteLine($"Exception {innerExceptions.InnerExceptions.FirstOrDefault()}.");
}
}
}));
}
// Wait until all are done
await Task.WhenAll(tasks);
Ezeket az egyidejű pontműveleteket a rendszer együtt hajtja végre (azaz tömegesen), a bevezető szakaszban leírtak szerint.
7. lépés: A minta futtatása
A minta futtatásához egyszerűen a dotnet parancsot használja:
dotnet run
A teljes minta lekérése
Ha nincs ideje az oktatóanyag lépéseinek végrehajtására, vagy csak szeretné letölteni a mintakódokat, a GitHubon beszerezhetőek.
A projekt klónozása után frissítse a kívánt hitelesítő adatokat a Program.cs.
A minta futtatható az adattár könyvtárába való átlépéssel és a következő parancs használatával: dotnet.
cd cosmos-dotnet-bulk-import-throughput-optimizer
dotnet run
Következő lépések
Kapacitástervezést szeretne végezni az Azure Cosmos DB-be való migráláshoz? A kapacitástervezéshez használhatja a meglévő adatbázisfürt adatait.
- 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 feladataira vonatkozó tipikus kérési arányokat, olvassa el a kérelemegységek becslését az Azure Cosmos DB kapacitástervezővel