Aktivér integreret cache
Aktivering af den integrerede cache
Aktivering af den integrerede cache udføres i to primære trin:
- Oprettelse af en dedikeret gateway i din Azure Cosmos DB til NoSQL-konto
- Opdaterer din SDK-kode for at bruge gatewayen til anmodninger
Opret en dedikeret gateway
Først skal du klargøre en dedikeret gateway på din konto. Denne handling kan udføres ved hjælp af portalen og ruden Dedikeret gateway .
Som en del af klargøringsprocessen bliver du bedt om at konfigurere antallet af gatewayforekomster og en SKU. Disse indstillinger bestemmer antallet af noder og beregnings- og hukommelsesstørrelsen for hver gatewaynode. Antallet af noder og SKU kan ændres senere, i takt med at mængden af data, du skal cachelagre, øges.
Når den nye gateway er klargjort, kan du få slutpunktet for gatewayen.
Bemærk!
Gatewayslutpunktet adskiller sig fra det typiske slutpunkt, der bruges sammen med en Azure Cosmos DB til NoSQL-klient.
Opdater .NET SDK-kode
Hvis .NET SDK-klienten skal bruge den integrerede cache, skal du sikre dig, at tre ting er sande:
- Klienten bruger det dedikerede gatewayslutpunkt i stedet for det typiske slutpunkt
- Klienten er konfigureret til at bruge gatewaytilstand i stedet for standardtilstanden for direkte forbindelse
- Klientens konsistensniveau skal indstilles til session eller eventuel
Kontrollér først, at slutpunktet er angivet til slutpunktet for den dedikerede gateway. Azure Cosmos DB til NoSQL-slutpunkter er typisk i formatet <cosmos-account-name>.documents.azure.com. For den dedikerede gateway er slutpunktet i strukturen af <cosmos-account-name>.sqlx.cosmos.azure.com.
I stedet for at bruge en kontonøgle skal du konfigurere SDK'et til at bruge en administreret identitet til godkendelse. Den opdaterede kode følger.
using Azure.Identity;
using Microsoft.Azure.Cosmos;
string endpoint = "https://<cosmos-account-name>.sqlx.cosmos.azure.com/";
CosmosClientOptions options = new()
{
ConnectionMode = ConnectionMode.Gateway,
ConsistencyLevel = ConsistencyLevel.Session // or ConsistencyLevel.Eventual
};
// Use DefaultAzureCredential to authenticate with managed identity.
CosmosClient client = new(endpoint, new DefaultAzureCredential(), options);
Bemærk!
Sørg for, at dit program har en administreret identitet aktiveret, og at den administrerede identitet er blevet tildelt rollen Cosmos DB Indbygget databidragyder på Azure Cosmos DB-kontoen.
Konfigurer punktlæsningshandlinger
Hvis du vil konfigurere en punktlæsningshandling til at bruge den integrerede cache, skal du oprette et objekt af typen ItemRequestOptions. I dette objekt kan du manuelt angive egenskaben ConsistencyLevel til enten ConsistencyLevel.Session eller ConsistencyLevel.Eventual. Du kan derefter bruge variablen options i ReadItemAsync-metodeaktiveringen .
string id = "9DB28F2B-ADC8-40A2-A677-B0AAFC32CAC8";
PartitionKey partitionKey = new("56400CF3-446D-4C3F-B9B2-68286DA3BB99");
ItemRequestOptions requestOptions = new()
{
ConsistencyLevel = ConsistencyLevel.Session
};
ItemResponse<Product> response = await container.ReadItemAsync<Product>(id, partitionKey, requestOptions: requestOptions);
Hvis du vil observere RU-forbruget, skal du bruge egenskaben RequestCharge for svarvariablen. Den første aktivering af denne læsehandling bruger det forventede antal anmodningsenheder. I dette eksempel er det én jernbanevirksomhed for en punktlæsningshandling. Efterfølgende anmodninger bruger ikke nogen anmodningsenheder, da dataene hentes fra cachen, før de udløber.
Console.WriteLine($"Request charge:\t{response.RequestCharge:0.00} RU/s");
Konfigurer forespørgsler
Hvis du vil konfigurere en forespørgsel til at bruge den integrerede cache, skal du oprette et objekt af typen QueryRequestOptions. I dette objekt skal du også manuelt ændre overensstemmelsesniveauet. Overfør derefter variablen options til aktiveringen af GetItemQueryIterator-metoden .
string sql = "SELECT * FROM products";
QueryDefinition query = new(sql);
QueryRequestOptions queryOptions = new()
{
ConsistencyLevel = ConsistencyLevel.Eventual
};
FeedIterator<Product> iterator = container.GetItemQueryIterator<Product>(query, requestOptions: queryOptions);
Du kan også observere RU-forbruget ved at hente egenskaben RequestCharge for hvert FeedResponse-objekt , der er knyttet til hver side med resultater. Hvis du aggregerer anmodningsgebyrerne, får du det samlede anmodningsgebyr for hele forespørgslen. På samme måde som med punktlæsninger bruger den første forespørgsel det typiske antal anmodningsenheder. Eventuelle ekstra forespørgsler bruger ingen anmodningsenheder, før dataene udløber i cachen.
double totalRequestCharge = 0;
while(iterator.HasMoreResults)
{
FeedResponse<Product> response = await iterator.ReadNextAsync();
totalRequestCharge += response.RequestCharge;
Console.WriteLine($"Request charge:\t\t{response.RequestCharge:0.00} RU/s");
}
Console.WriteLine($"Total request charge:\t{totalRequestCharge:0.00} RU/s");