Azure Cosmos DB'deki tutarlılık düzeylerini yönetme

ŞUNUN IÇIN GEÇERLIDIR: NoSQL

Bu makalede Azure Cosmos DB'de tutarlılık düzeylerinin nasıl yönetileceğini açıklanmaktadır. Varsayılan tutarlılık düzeyini yapılandırmayı, varsayılan tutarlılığı geçersiz kılmayı, oturum belirteçlerini el ile yönetmeyi ve Olasılıksal Sınırlanmış Eskime (PBS) ölçümünü anlamayı öğreneceksiniz.

Hesap düzeyi tutarlılığınızı değiştirirken, uygulamalarınızı yeniden dağıtıp bu değişiklikleri uygulamak için gerekli kod değişikliklerini yaptığınızdan emin olun.

Not

Azure ile etkileşim kurmak için Azure Az PowerShell modülünü kullanmanızı öneririz. Başlamak için bkz. Azure PowerShell'i yükleme. Az PowerShell modülüne nasıl geçeceğinizi öğrenmek için bkz. Azure PowerShell’i AzureRM’den Az’ye geçirme.

Varsayılan tutarlılık düzeyini yapılandırma

Varsayılan tutarlılık düzeyi, istemcilerin varsayılan olarak kullandığı tutarlılık düzeyidir.

Varsayılan tutarlılık düzeyini görüntülemek veya değiştirmek için Azure portal oturum açın. Azure Cosmos DB hesabınızı bulun ve Varsayılan tutarlılık bölmesini açın. Yeni varsayılan olarak istediğiniz tutarlılık düzeyini seçin ve ardından Kaydet'i seçin. Azure portal ayrıca müzik notları ile farklı tutarlılık düzeylerinin görselleştirmesini sağlar.

Azure portal Tutarlılık menüsü

Varsayılan tutarlılık düzeyini geçersiz kılma

İstemciler, hizmet tarafından belirlenen varsayılan tutarlılık düzeyini geçersiz kılabilir. Tutarlılık düzeyi istek başına ayarlanabilir ve bu da hesap düzeyinde ayarlanan varsayılan tutarlılık düzeyini geçersiz kılar.

İpucu

Tutarlılık yalnızca SDK örneğinde veya istek düzeyinde gevşetilebilir . Zayıftan daha güçlü tutarlılık düzeyine geçmek için Azure Cosmos DB hesabının varsayılan tutarlılığını güncelleştirin.

İpucu

Varsayılan tutarlılık düzeyini geçersiz kılma yalnızca SDK istemcisi içindeki okuma işlemleri için geçerlidir. Varsayılan olarak güçlü tutarlılık için yapılandırılmış bir hesap, hesaptaki her bölgeye eşzamanlı olarak veri yazmaya ve çoğaltmaya devam eder. SDK istemci örneği veya isteği bunu Oturum veya daha zayıf tutarlılık ile geçersiz kıldığında, okuma işlemleri tek bir çoğaltma kullanılarak gerçekleştirilir. Daha fazla ayrıntı için bkz . Tutarlılık düzeyleri ve aktarım hızı .

.NET SDK

// Override consistency at the client level
documentClient = new DocumentClient(new Uri(endpoint), authKey, connectionPolicy, ConsistencyLevel.Eventual);

// Override consistency at the request level via request options
RequestOptions requestOptions = new RequestOptions { ConsistencyLevel = ConsistencyLevel.Eventual };

var response = await client.ReadDocumentAsync(collectionUri, document, requestOptions);

Java V4 SDK'sı

Java SDK V4 (Maven com.azure::azure-cosmos) Async API


CosmosAsyncClient client =
        new CosmosClientBuilder()
                .endpoint(HOST)
                .key(MASTER_KEY)
                .consistencyLevel(ConsistencyLevel.EVENTUAL)
                .buildAsyncClient();

Java V2 SDK'ları

Zaman uyumsuz Java V2 SDK'sı (Maven com.microsoft.azure::azure-cosmosdb)

// Override consistency at the client level
ConnectionPolicy policy = new ConnectionPolicy();

AsyncDocumentClient client =
        new AsyncDocumentClient.Builder()
                .withMasterKey(this.accountKey)
                .withServiceEndpoint(this.accountEndpoint)
                .withConsistencyLevel(ConsistencyLevel.Eventual)
                .withConnectionPolicy(policy).build();

Node.js/JavaScript/TypeScript SDK

// Override consistency at the client level
const client = new CosmosClient({
  /* other config... */
  consistencyLevel: ConsistencyLevel.Eventual
});

// Override consistency at the request level via request options
const { body } = await item.read({ consistencyLevel: ConsistencyLevel.Eventual });

Python SDK'sı

# Override consistency at the client level
connection_policy = documents.ConnectionPolicy()
client = cosmos_client.CosmosClient(self.account_endpoint, {
                                    'masterKey': self.account_key}, connection_policy, documents.ConsistencyLevel.Eventual)

Oturum belirteçlerini kullanma

Azure Cosmos DB'deki tutarlılık düzeylerinden biri Oturum tutarlılığıdır. Bu, Azure Cosmos DB hesaplarına varsayılan olarak uygulanan varsayılan düzeydir. Oturum tutarlılığıyla çalışırken, Azure Cosmos DB'ye yapılan her yeni yazma isteğine yeni bir SessionToken atanır. CosmosClient, ayarlanan tutarlılık düzeyinin korunmasını sağlamak için bu belirteci her okuma/sorgu isteğiyle birlikte dahili olarak kullanır.

Bazı senaryolarda bu Oturumu kendiniz yönetmeniz gerekir. Birden çok düğüme sahip bir web uygulaması düşünün; her düğümün kendi CosmosClient örneği olacaktır. Bu düğümlerin aynı oturuma katılmasını istiyorsanız (kendi yazmalarınızı web katmanları arasında tutarlı bir şekilde okuyabilmek için) yazma eyleminin SessionToken'ini FeedResponse<T'den> son kullanıcıya bir tanımlama bilgisi veya başka bir mekanizma kullanarak göndermeniz ve bu belirtecin web katmanına geri akışının yanı sıra sonraki okumalar için CosmosClient'a sahip olmanız gerekir. Azure Load Balancer gibi istekler arasında oturum benzitesini korumayan bir hepsini bir kez deneme yük dengeleyici kullanıyorsanız, okuma işlemi büyük olasılıkla oturumun oluşturulduğu yazma isteğine farklı bir düğüme gelebilir.

Yukarıda açıklandığı gibi Azure Cosmos DB SessionToken'ın akışını yapmazsanız, bir süre boyunca tutarsız okuma sonuçları elde edebilirsiniz.

Azure Cosmos DB'deki Oturum Belirteçleri bölüme bağlıdır, yani yalnızca bir bölümle ilişkilendirilir. Yazmalarınızı okuyabildiğinizden emin olmak için, ilgili öğeler için en son oluşturulan oturum belirtecini kullanın. Oturum belirteçlerini el ile yönetmek için yanıttan oturum belirtecini alın ve istek başına ayarlayın. Oturum belirteçlerini el ile yönetmeniz gerekmiyorsa bu örnekleri kullanmanız gerekmez. SDK, oturum belirteçlerini otomatik olarak izler. Oturum belirtecini el ile ayarlamazsanız SDK varsayılan olarak en son oturum belirtecini kullanır.

.NET SDK

var response = await client.ReadDocumentAsync(
                UriFactory.CreateDocumentUri(databaseName, collectionName, "SalesOrder1"));
string sessionToken = response.SessionToken;

RequestOptions options = new RequestOptions();
options.SessionToken = sessionToken;
var response = await client.ReadDocumentAsync(
                UriFactory.CreateDocumentUri(databaseName, collectionName, "SalesOrder1"), options);

Java V4 SDK'sı

Java SDK V4 (Maven com.azure::azure-cosmos) Async API


// Get session token from response
CosmosItemResponse<JsonNode> response = container.readItem(itemId, new PartitionKey(partitionKey), JsonNode.class).block();
String sessionToken = response.getSessionToken();

// Resume the session by setting the session token on the RequestOptions
CosmosItemRequestOptions options = new CosmosItemRequestOptions();
options.setSessionToken(sessionToken);
CosmosItemResponse<JsonNode> response2 = container.readItem(itemId, new PartitionKey(partitionKey), JsonNode.class).block();

Java V2 SDK'ları

Zaman uyumsuz Java V2 SDK'sı (Maven com.microsoft.azure::azure-cosmosdb)

// Get session token from response
RequestOptions options = new RequestOptions();
options.setPartitionKey(new PartitionKey(document.get("mypk")));
Observable<ResourceResponse<Document>> readObservable = client.readDocument(document.getSelfLink(), options);
readObservable.single()           // we know there will be one response
  .subscribe(
      documentResourceResponse -> {
          System.out.println(documentResourceResponse.getSessionToken());
      },
      error -> {
          System.err.println("an error happened: " + error.getMessage());
      });

// Resume the session by setting the session token on RequestOptions
RequestOptions options = new RequestOptions();
requestOptions.setSessionToken(sessionToken);
Observable<ResourceResponse<Document>> readObservable = client.readDocument(document.getSelfLink(), options);

Node.js/JavaScript/TypeScript SDK

// Get session token from response
const { headers, item } = await container.items.create({ id: "meaningful-id" });
const sessionToken = headers["x-ms-session-token"];

// Immediately or later, you can use that sessionToken from the header to resume that session.
const { body } = await item.read({ sessionToken });

Python SDK'sı

// Get the session token from the last response headers
item = client.ReadItem(item_link)
session_token = client.last_response_headers["x-ms-session-token"]

// Resume the session by setting the session token on the options for the request
options = {
    "sessionToken": session_token
}
item = client.ReadItem(doc_link, options)

Olasılığa Dayalı Sınırlanmış Eskime Durumu (PBS) ölçümünü izleme

Nihai tutarlılık nasıldır? Ortalama durum için sürüm geçmişine ve zamana göre eskime sınırları sunabilir miyiz? Olasılıksal Sınırlanmış Eskime (PBS) ölçümü, eskime olasılığını ölçmeye çalışır ve bunu bir ölçüm olarak gösterir.

PBS ölçümünü görüntülemek için Azure portal Azure Cosmos DB hesabınıza gidin. Ölçümler (Klasik) bölmesini açın ve Tutarlılık sekmesini seçin. İş yükünüze göre güçlü tutarlı okuma olasılığı adlı grafiğe bakın (bkz. PBS)..

Azure portal PBS grafiği

Sonraki adımlar

Azure Cosmos DB'de veri çakışmalarını yönetme veya sonraki temel kavrama geçme hakkında daha fazla bilgi edinin. Aşağıdaki makalelere bakın: