Aracılığıyla paylaş


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

UYGULANANLAR: 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ında 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ı, müzik notları ile farklı tutarlılık düzeylerinin görselleştirmesini de sağlar.

Azure portalında 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 olarak 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. Daha zayıf tutarlılıktan 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 zaman uyumlu 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

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 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 yazma işlemlerinizi 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ı ve son olarak sonraki okumalar için CosmosClient'ı kullanmanız gerekir. Azure Load Balancer gibi istekler arasında oturum benşimini korumayan hepsini bir kez deneme yük dengeleyici kullanıyorsanız, okuma işlemi yazma isteğinde oturumun oluşturulduğu farklı bir düğüme gelebilir.

Azure Cosmos DB SessionToken'ı yukarıda açıklandığı gibi akmıyorsanız, bir süre tutarsız okuma sonuçlarıyla karşılaşabilirsiniz.

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

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ıl olur? Ortalama durum için sürüm geçmişine ve zamana göre eskime sınırları sunabiliriz. 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ında 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 kesin tutarlı okuma olasılığı adlı grafiğe bakın (bkz. PBS).

Azure portalında PBS grafiği

Sonraki adımlar

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