Azure Cosmos DB の整合性レベルConsistency levels in Azure Cosmos DB

分散型データベースでは高可用性もしくは待機時間の短縮、またはその両方がレプリケーションに依存するため、読み取りの整合性、可用性、待機時間、スループットとの間に基本的なトレードオフが生じます。Distributed databases that rely on replication for high availability, low latency, or both, make the fundamental tradeoff between the read consistency vs. availability, latency, and throughput. 市販のほとんどの分散型データベースでは、開発者は 2 つの極端な整合性モデル (厳密な整合性と最終的な整合性) のどちらかを選ぶことを求められます。Most commercially available distributed databases ask developers to choose between the two extreme consistency models: strong consistency and eventual consistency. 線形化可能性、つまり厳密な整合性モデルは、データ プログラミングの標準基準です。The linearizability or the strong consistency model is the gold standard of data programmability. しかし、(安定状態での) 待機時間が長く、(障害発生時の) 可用性が低いという代償があります。But it adds a price of higher latency (in steady state) and reduced availability (during failures). その一方で、最終的な整合性は、可用性が高くパフォーマンスに優れていますが、アプリケーションのプログラミングが難しくなります。On the other hand, eventual consistency offers higher availability and better performance, but makes it hard to program applications.

Azure Cosmos DB では、2 つの両極端ではなく、幅広い選択肢を利用できるデータ整合性に対応しています。Azure Cosmos DB approaches data consistency as a spectrum of choices instead of two extremes. 厳密な整合性と最終的な整合性は、整合性の選択範囲の両端にありますが、その間には多くの整合性の選択肢があります。Strong consistency and eventual consistency are at the ends of the spectrum, but there are many consistency choices along the spectrum. 開発者は、これらの整合性オプションを使用して、最適な選択を行い、高可用性とパフォーマンスに関して詳細なトレードオフを決定できます。Developers can use these options to make precise choices and granular tradeoffs with respect to high availability and performance.

Azure Cosmos DB では、開発者は、整合性の程度に応じて明確に定義された 5 種類の整合性モデルから選択することができます。With Azure Cosmos DB, developers can choose from five well-defined consistency models on the consistency spectrum. 最も厳密なものからより緩やかなものに向かって、厳密有界整合性制約セッション一貫性のあるプレフィックス最終的の各整合性モデルがあります。From strongest to more relaxed, the models include strong, bounded staleness, session, consistent prefix, and eventual consistency. これらのモデルは適切に定義されていて直感的であり、具体的な実際のシナリオに使用することができます。The models are well-defined and intuitive and can be used for specific real-world scenarios. どのモデルにも可用性とパフォーマンスのトレードオフがあり、それぞれ SLA によって支えられています。Each model provides availability and performance tradeoffs and is backed by the SLAs. 次の図では、さまざまな整合性レベルの範囲内での位置づけを示します。The following image shows the different consistency levels as a spectrum.

範囲としての整合性

読み取りと書き込みが行われるリージョン、Azure Cosmos アカウントに関連付けられているリージョン数、またはアカウントの構成に使用されている書き込みリージョンが 1 つか複数かには関係なく、Azure Cosmos アカウントの整合性レベルはリージョンに依存せず、すべての操作で保証されています。The consistency levels are region-agnostic and are guaranteed for all operations regardless of the region from which the reads and writes are served, the number of regions associated with your Azure Cosmos account, or whether your account is configured with a single or multiple write regions.

読み取り整合性のスコープScope of the read consistency

読み取り整合性は、パーティションキー範囲または論理パーティション内をスコープとする 1 つの読み取り操作に適用されます。Read consistency applies to a single read operation scoped within a partition-key range or a logical partition. 読み取り操作はリモート クライアントまたはストアド プロシージャが発行できます。The read operation can be issued by a remote client or a stored procedure.

既定の一貫性レベルを構成するConfigure the default consistency level

Azure Cosmos アカウントの既定の整合性レベルはいつでも構成できます。You can configure the default consistency level on your Azure Cosmos account at any time. 自分のアカウントに構成されている既定の整合性レベルは、そのアカウントのすべての Azure Cosmos データベースおよびコンテナーに適用されます。The default consistency level configured on your account applies to all Azure Cosmos databases and containers under that account. コンテナーまたはデータベースに対して発行されるすべての読み取りとクエリでは、指定された整合性レベルが既定で使用されます。All reads and queries issued against a container or a database use the specified consistency level by default. 詳しくは、既定の一貫性レベルを構成する方法をご覧ください。To learn more, see how to configure the default consistency level.

整合性レベルに関連付けられた保証Guarantees associated with consistency levels

Azure Cosmos DB によって提供される包括的 SLA では、読み取り要求の 100 パーセントが、選択した任意の整合性レベルについて整合性の保証を満たすことが保証されます。The comprehensive SLAs provided by Azure Cosmos DB guarantee that 100 percent of read requests meet the consistency guarantee for any consistency level you choose. 整合性レベルに関連付けられている整合性の保証がすべて満たされていれば、読み取り要求は整合性の SLA を満たします。A read request meets the consistency SLA if all the consistency guarantees associated with the consistency level are satisfied. TLA+ 仕様言語を使用した Azure Cosmos DB での 5 つの整合性レベルの正確な定義は、azure-cosmos-tla GitHub リポジトリで提供されています。The precise definitions of the five consistency levels in Azure Cosmos DB using the TLA+ specification language are provided in the azure-cosmos-tla GitHub repo.

5 つの整合性レベルのセマンティクスを以下で説明します。The semantics of the five consistency levels are described here:

  • Strong:強力な一貫性は、線形化可能性保証を与えます。Strong: Strong consistency offers a linearizability guarantee. 線形化可能性は、要求に同時にサービスを提供することを意味します。Linearizability refers to serving requests concurrently. 読み取りでは、アイテムの最後にコミットされたバージョンが返ることが保証されています。The reads are guaranteed to return the most recent committed version of an item. クライアントが、コミットされていない書き込みや部分的な書き込みを見ることは決してありません。A client never sees an uncommitted or partial write. ユーザーが最新のコミット済みの書き込みを読み取ることが常に保証されます。Users are always guaranteed to read the latest committed write.

  • Bounded Staleness:読み取りでは、整合性のあるプレフィックスの優先が保証されます。Bounded staleness: The reads are guaranteed to honor the consistent-prefix guarantee. 読み取りが書き込みよりも遅れますが、最大でアイテムの "K" 個のバージョン (更新) の分、あるいは期間 "T" の分だけです。The reads might lag behind writes by at most "K" versions (i.e., "updates") of an item or by "T" time interval. つまり、有界整合性制約を選択する場合、"整合性制約" は 2 つの方法で構成できます。In other words, when you choose bounded staleness, the "staleness" can be configured in two ways:

    • アイテムのバージョンの数 (K)The number of versions (K) of the item
    • 書き込みに対して読み取りが遅れる期間 (T)The time interval (T) by which the reads might lag behind the writes

    有界整合性制約では、"整合性制約期間" 内を除いてトータルなグローバル順序が実現されます。Bounded staleness offers total global order except within the "staleness window." リージョン内では、整合性制約期間内外の両方でモノトニックな読み取り保証が実現されます。The monotonic read guarantees exist within a region both inside and outside the staleness window. 厳密な整合性にも、有界整合性制約で提供されるのと同じセマンティクスがあります。Strong consistency has the same semantics as the one offered by bounded staleness. 整合性制約期間は 0 です。The staleness window is equal to zero. 有界整合性制約は、遅延線形化可能性とも呼ばれます。Bounded staleness is also referred to as time-delayed linearizability. 書き込みを受け入れるリージョン内でクライアントが読み取り操作を実行するとき、有界整合性制約整合性で提供される保証は、厳密な整合性の場合と同じです。When a client performs read operations within a region that accepts writes, the guarantees provided by bounded staleness consistency are identical to those guarantees by the strong consistency.

  • Session:1 回のクライアント セッション内で、読み取りでは、整合性のあるプレフィックス (単一 "ライター" セッションの場合)、単調読み取り、単調書き込み、自己書き込みの読み取り、読み取り後の書き込みの優先が保証されます。Session: Within a single client session reads are guaranteed to honor the consistent-prefix (assuming a single “writer” session), monotonic reads, monotonic writes, read-your-writes, and write-follows-reads guarantees. 書き込みを実行しているセッションの外部のクライアントは、最終的な整合性を確認できます。Clients outside of the session performing writes will see eventual consistency.

  • 整合性のあるプレフィックス:返される更新には、それ以外の全更新の一部のプレフィックスが含まれます (ギャップなし)。Consistent prefix: Updates that are returned contain some prefix of all the updates, with no gaps. 一貫性のあるプレフィックスの一貫性レベルでは、読み取りの際、書き込みを順序どおりに参照することが保証されます。Consistent prefix consistency level guarantees that reads never see out-of-order writes.

  • Eventual:読み取りの順序の保証はありません。Eventual: There's no ordering guarantee for reads. さらに書き込みがない場合、レプリカが最終的に収束します。In the absence of any further writes, the replicas eventually converge.

野球で説明する整合性レベルConsistency levels explained through baseball

例として野球の試合のシナリオを見てみましょう。Let's take a baseball game scenario as an example. 野球の試合の点数を表す一連の書き込みを想像してみてください。Imagine a sequence of writes that represent the score from a baseball game. イニングごとのスコアは、「Replicated data consistency through baseball」(レプリケート データの整合性を野球にたとえると) という論文で説明されています。The inning-by-inning line score is described in the Replicated data consistency through baseball paper. この仮定の野球の試合は、現在 7 回の表と裏の間です。This hypothetical baseball game is currently in the middle of the seventh inning. いわゆるセブンイニング ストレッチです。It's the seventh-inning stretch. 以下に示すように、ビジターが 2 対 5 でリードされています。The visitors are behind with a score of 2 to 5 as shown below:

11 22 33 44 55 66 77 88 99 Runs
ビジターVisitors 00 00 11 00 11 00 00 22
ホームHome 11 00 11 11 00 22 55

Azure Cosmos コンテナーに、ビジター チームとホーム チームの合計得点が格納されます。An Azure Cosmos container holds the run totals for the visitors and home teams. 試合の進行中に、さまざまな読み取り保証を使用すると、クライアントは異なる点数を読み取ることになります。While the game is in progress, different read guarantees might result in clients reading different scores. 次の表に、5 つの整合性保証それぞれを使用してビジターとホームの点数を読み取ったときに、返される可能性がある点数の一覧を示します。The following table lists the complete set of scores that might be returned by reading the visitors' and home scores with each of the five consistency guarantees. 最初に表示されているのはビジターの点数です。The visitors' score is listed first. さまざまな戻り値がコンマで区切って示されています。Different possible return values are separated by commas.

整合性レベルConsistency level スコア (ビジター、ホーム)Scores (Visitors, Home)
厳密Strong 2-52-5
有界整合性制約Bounded staleness 最大で 1 イニング遅れの点数:2-3、2-4、2-5Scores that are at most one inning out of date: 2-3, 2-4, 2-5
セッションSession
  • 書き込み側:2-5For the writer: 2-5
  • 書き込み側以外:0-0、0-1、0-2、0-3、0-4、0-5、1-0、1-1、1-2、1-3、1-4、1-5、2-0、2-1、2-2、2-3、2-4、2-5For anyone other than the writer: 0-0, 0-1, 0-2, 0-3, 0-4, 0-5, 1-0, 1-1, 1-2, 1-3, 1-4, 1-5, 2-0, 2-1, 2-2, 2-3, 2-4, 2-5
  • 1-3 を読み取った後:1-3、1-4、1-5、2-3、2-4、2-5After reading 1-3: 1-3, 1-4, 1-5, 2-3, 2-4, 2-5
一貫性のあるプレフィックスConsistent prefix 0-0、0-1、1-1、1-2、1-3、2-3、2-4、2-50-0, 0-1, 1-1, 1-2, 1-3, 2-3, 2-4, 2-5
最終的Eventual 0-0、0-1、0-2、0-3、0-4、0-5、1-0、1-1、1-2、1-3、1-4、1-5、2-0、2-1、2-2、2-3、2-4、2-50-0, 0-1, 0-2, 0-3, 0-4, 0-5, 1-0, 1-1, 1-2, 1-3, 1-4, 1-5, 2-0, 2-1, 2-2, 2-3, 2-4, 2-5

その他の情報Additional reading

整合性の概念について詳しくは、以下の記事をご覧ください。To learn more about consistency concepts, read the following articles:

次の手順Next steps

Azure Cosmos DB の整合性レベルの概念の詳細については、以下の記事をご覧ください。To learn more about consistency levels in Azure Cosmos DB, read the following articles: