Geïntegreerde cache inschakelen

Voltooid

Geïntegreerde cache inschakelen

Het inschakelen van de geïntegreerde cache wordt uitgevoerd in twee primaire stappen:

  • Een toegewezen gateway maken in uw Azure Cosmos DB for NoSQL-account
  • Uw SDK-code bijwerken om de gateway te gebruiken voor aanvragen

Een toegewezen gateway maken

Eerst moet u een toegewezen gateway inrichten in uw account. Deze actie kan worden uitgevoerd via de portal en het deelvenster Dedicated Gateway.

Toegewezen gatewaynavigatie geopend in azure Cosmos DB-blade

Als onderdeel van het inrichtingsproces wordt u gevraagd het aantal gateway-exemplaren en een SKU te configureren. Deze instellingen bepalen het aantal knooppunten en de reken- en geheugengrootte voor elk gatewayknooppunt. Het aantal knooppunten en de SKU kan later worden gewijzigd naarmate de hoeveelheid gegevens die u nodig hebt om de cache te vergroten.

Configuratieopties voor toegewezen gateways voor SKU en aantal knooppunten

Zodra de nieuwe gateway is ingericht, kunt u het eindpunt voor de gateway ophalen.

Notitie

Het gateway-eindpunt verschilt van het gebruikelijke eindpunt dat wordt gebruikt met een Azure Cosmos DB for NoSQL-client.

.NET SDK-code bijwerken

Voor het gebruik van de geïntegreerde cache voor de .NET SDK-client moet u ervoor zorgen dat er drie dingen waar zijn:

  • De client gebruikt het toegewezen gateway-eindpunt in plaats van het typische eindpunt
  • De client is geconfigureerd voor het gebruik van de gatewaymodus in plaats van de standaardmodus voor directe connectiviteit
  • Het consistentieniveau van de client moet worden ingesteld op sessie of uiteindelijk

Zorg er eerst voor dat het eindpunt is ingesteld op het eindpunt van de toegewezen gateway. Azure Cosmos DB voor NoSQL-eindpunten hebben doorgaans de indeling .<cosmos-account-name>.documents.azure.com Voor de toegewezen gateway bevindt het eindpunt zich in de structuur van <cosmos-account-name>.sqlx.cosmos.azure.com.

In plaats van een accountsleutel te gebruiken, configureert u de SDK voor het gebruik van een beheerde identiteit voor verificatie. De bijgewerkte code volgt.

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);

Notitie

Zorg ervoor dat voor uw toepassing een beheerde identiteit is ingeschakeld en dat de beheerde identiteit de rol Inzender voor cosmos DB ingebouwde gegevens heeft gekregen in het Azure Cosmos DB-account.

Leesbewerkingen voor punten configureren

Als u een puntleesbewerking wilt configureren voor het gebruik van de geïntegreerde cache, moet u een object van het type ItemRequestOptions maken. In dit object kunt u de eigenschap ConsistencyLevel handmatig instellen op ConsistencyLevel.Session of ConsistencyLevel.Eventual. Vervolgens kunt u de optievariabele gebruiken in de aanroep van de methode ReadItemAsync .

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);

Als u het RU-gebruik wilt bekijken, gebruikt u de eigenschap RequestCharge van de antwoordvariabele. Bij de eerste aanroep van deze leesbewerking wordt het verwachte aantal aanvraageenheden gebruikt. In dit voorbeeld is het één RU voor een leesbewerking voor punten. Volgende aanvragen gebruiken geen aanvraageenheden omdat de gegevens uit de cache worden opgehaald totdat deze verlopen.

Console.WriteLine($"Request charge:\t{response.RequestCharge:0.00} RU/s");

Query's configureren

Als u een query wilt configureren voor het gebruik van de geïntegreerde cache, maakt u een object van het type QueryRequestOptions. In dit object moet u ook het consistentieniveau handmatig wijzigen. Geef vervolgens de optievariabele door aan de aanroep van de GetItemQueryIterator-methode .

string sql = "SELECT * FROM products";
QueryDefinition query = new(sql);

QueryRequestOptions queryOptions = new()
{
    ConsistencyLevel = ConsistencyLevel.Eventual
};

FeedIterator<Product> iterator = container.GetItemQueryIterator<Product>(query, requestOptions: queryOptions);

U kunt ook het RU-gebruik bekijken door de eigenschap RequestCharge op te halen van elk FeedResponse-object dat is gekoppeld aan elke pagina met resultaten. Als u de aanvraagkosten samenvoegt, krijgt u de totale aanvraagkosten voor de hele query. Net als bij puntleesbewerkingen gebruikt de eerste query het typische aantal aanvraageenheden. Eventuele extra query's gebruiken geen aanvraageenheden totdat de gegevens in de cache verlopen.

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");