管理 Azure 和 DB Cosmos一致性等級

適用于 :SQL API

本文說明如何在 Azure 和 DB 中管理一致性Cosmos層級。 您將瞭解如何設定預設一致性等級、重寫預設一致性、手動管理會話權杖,以及瞭解 PBS (限制的過時) 量。

注意

本文使用 Azure Az PowerShell 模組,這是建議與 Azure 互動的 PowerShell 模組。 若要開始使用 Az PowerShell 模組,請參閱安裝Azure PowerShell。 若要瞭解如何遷移到 Az PowerShell 模組,請參閱將 Azure PowerShell從 AzureRM Azure PowerShell到 Az

設定預設一致性等級

預設 一致性層級 是用戶端預設使用的一致性層級。

若要查看或修改預設的一致性層級,請登錄 Azure 入口網站。 尋找您的 Azure Cosmos帳戶,然後開啟預設一致性窗格。 選取您想要的一致性層級做為新的預設值, 然後選取儲存 。 Azure 入口網站也會提供不同一致性等級與音樂筆記的視覺效果。

Azure 入口網站中的一致性功能表

重寫預設一致性層級

用戶端可以重寫服務所設定的預設一致性層級。 一致性等級可以設定為每個要求,這會取代帳戶層級中設定的預設一致性層級。

提示

一致性只能在 SDK 實例 或要求層級放鬆。 若要從弱到強一致性,請更新帳戶Cosmos一致性。

提示

重寫預設一致性層級僅適用于 SDK 用戶端內的讀取。 根據預設,為強一致性所配置的帳戶仍然會同步寫入資料,並複製到帳戶的每一個區域。 當 SDK 用戶端實例或要求以會話或較弱的一致性取代此內容時,會使用單一複本執行讀取。 請參閱 一致性等級和輸送量 以進一步查看詳細資料。

.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.CreateDocumentAsync(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

Async- JAVA V2 – SDK - (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

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

使用會話權杖

Azure 和 DB 的一致性Cosmos會話一致性。 這是預設適用于Cosmos層級。 使用 會話一 致性時,用戶端會針對每個讀取/查詢要求在內部使用會話權杖,以確保維持所設定一致性層級。

若要手動管理會話權杖,請從回應取得會話權杖,並設定每個要求。 如果您不需要手動管理會話權杖,則不需要使用這些範例。 SDK 會自動追蹤會話權杖。 如果您沒有手動設定會話權杖,根據預設,SDK 會使用最新的會話權杖。

.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

Async- JAVA V2 – SDK - (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

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

監控 PBS (邊界) 過時

最終一致性的最終結果如何? 對於一般案例,我們可以針對版本歷程記錄與時間提供過時界限嗎? PBS ( 限制) 量值會嘗試量化過期機率,並且以度量方式顯示。 若要查看 PBS 度量,請前往 Azure 入口網站Cosmos您的 Azure 帳戶。 開啟度量單位窗格,然後選取一致性選項卡。請參閱 PBS 或 pbS (根據您的工作量來命名的強一致性讀取機率) 。

Azure 入口網站中的 PBS 圖形

下一個步驟

深入瞭解如何管理資料衝突,或移至 Azure Cosmos概念。 請參閱下列文章: