milvus-logo
LFAI
フロントページへ
  • コンセプト

一貫性

このトピックでは、Milvusにおける4つの一貫性のレベルと、それらに最適なシナリオを紹介します。また、Milvusにおける一貫性確保のメカニズムについても説明します。

概要

分散データベースにおける一貫性とは、特にデータの書き込みまたは読み出し時に、すべてのノードまたはレプリカが同じデータのビューを持つことを保証する特性を指します。

Milvusは、strong、bounded staleness、session、enduallyの4つの一貫性レベルをサポートしています。Milvusのデフォルトの一貫性レベルはbounded stalenessです。 単一ベクトル検索ハイブリッド検索クエリを実行する際に一貫性レベルを簡単に調整し、アプリケーションに最適なものにすることができます。

一貫性レベル

PACELCの定理で定義されているように、分散データベースは一貫性、可用性、レイテンシの間でトレードオフを行う必要があります。高い一貫性は高い精度と高い検索レイテンシーを意味し、低い一貫性は速い検索速度をもたらしますが、データの可視性はある程度失われます。したがって、異なる一貫性レベルは異なるシナリオに適している。

以下では、Milvusがサポートする4つの一貫性レベルの違いと、それぞれが適合するシナリオについて説明する。

強力

Strongは最も高く、最も厳格な一貫性レベルです。ユーザが最新バージョンのデータを読めることを保証します。

Strong consistency 強力な一貫性

PACELCの定理によると、一貫性レベルをstrongに設定すると、レイテンシが増加します。したがって、テスト結果の正確性を保証するために、機能テストでは強い一貫性を選択することを推奨します。強い一貫性は、検索速度を犠牲にしてもデータの一貫性を厳しく要求するアプリケーションにも最適です。例えば、注文の支払いや請求に対応するオンライン金融システムなどです。

境界的陳腐性

Bounded stalenessは、その名が示すように、ある一定期間のデータの一貫性のなさを許容する。しかし一般的に、その期間外ではデータは常にグローバルに一貫している。

Bounded staleness consistency バウンデッド・スタルネスの一貫性

Bounded stalenessは、検索レイテンシを制御する必要があり、散発的なデータの不可視性を許容できるシナリオに適している。例えば、ビデオ推薦エンジンのような推薦システムにおいて、データの不可視性は全体的な想起率への影響は小さいが、推薦システムの性能を大幅に向上させることがある。

セッション

セッションは、すべてのデータの書き込みが同じセッション中の読み込みで即座に認識できることを保証します。言い換えれば、あるクライアントを介してデータを書き込むと、新しく挿入されたデータは即座に検索可能になります。

Session consistency セッション一貫性

同一セッション内でのデータの一貫性に対する要求が高いシナリオでは、一貫性レベルとしてセッションを選択することをお勧めします。例えば、図書館システムから本のエントリーのデータを削除し、削除を確認してページを更新(別のセッション)すると、その本は検索結果に表示されなくなります。

結局

読み込みと書き込みの順序は保証されておらず、それ以上書き込み操作が行われなければ、レプリカは最終的に同じ状態に収束します。最終的に "の一貫性の下では、レプリカは最新の更新された値で読み取り要求の処理を開始します。最終的一貫性は、4つの中で最も弱いレベルである。

Eventual consistency 最終的一貫性

しかし、PACELCの定理によれば、一貫性を犠牲にすることで、検索レイテンシを驚異的に短縮することができる。従って、最終的一貫性は、データの一貫性はあまり要求されないが、高速な検索性能が要求されるシナリオに最適である。例えば、Amazonの商品のレビューや評価を、最終的に一貫性のあるレベルで検索することができます。

タイムスタンプの保証

MilvusはGuarantee timestamp(GuaranteeTs)を導入することで、異なる一貫性レベルを実現しています。

GuaranteeTsは、GuaranteeTs以前のすべてのデータがクエリノードによって見られるようになるまで、検索またはクエリ要求が実行されないことをクエリノードに通知する役割を果たします。整合性レベルを指定すると、整合性レベルは特定の GuaranteeTs 値に対応付けられます。異なる GuaranteeTs 値は、異なる整合性レベルに対応します:

  • Strong:GuaranteeTsは最新のシステム・タイムスタンプと同一に設定され、クエリ・ノードは検索またはクエリ・リクエストを処理する前に、最新のシステム・タイムスタンプより前のデータがすべて見えるようになるまで待ちます。

  • 制約のある陳腐化:GuaranteeTsは最新のシステムタイムスタンプよりも相対的に小さく設定され、クエリノードは許容範囲内の更新の少ないデータビューを検索する。

  • セッション:クライアントは最新の書き込み操作のタイムスタンプをGuaranteeTsとして使用し、各クライアントは少なくとも同じクライアントが挿入したデータを取得できるようにする。

  • 最終的には整合性チェックをスキップするため、GuaranteeTsは非常に小さな値に設定される。クエリ・ノードは既存のデータ・ビューを直ちに検索します。

Milvusの様々なレベルの一貫性を保証する仕組みの詳細については、GuaranteeTsの仕組みを参照してください。

次のステップ

翻訳DeepLogo

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
フィードバック

このページは役に立ちましたか ?