🚀 Zilliz Cloudを無料で試す、完全管理型のMilvus—10倍の高速パフォーマンスを体験しよう!今すぐ試す>>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvusベクターデータベースの一貫性レベルの理解

Milvusベクターデータベースの一貫性レベルの理解

  • Engineering
August 29, 2022
Chenglong Li

Cover_image 表紙画像

この記事はChenglong Liによって書かれ、Angela Niによって翻訳されました。

Mlivusのベクターデータベースから削除したデータが検索結果に表示されることがあるのを不思議に思ったことはありませんか?

それは、アプリケーションに適切な一貫性レベルを設定していないからです。分散ベクターデータベースの一貫性レベルは、特定のデータの書き込みがどの時点でシステムによって読み取られるかを決定するため、非常に重要です。

そこで、この記事では一貫性の概念を解明し、Milvusベクトルデータベースがサポートする一貫性のレベルについて掘り下げていきます。

ジャンプ

一貫性とは何か

一貫性 "という言葉はコンピューティング業界では使い古された言葉なので、この記事を始める前にまず一貫性の意味合いを明確にする必要があります。分散データベースにおける一貫性とは、特に、ある時点でデータを書き込んだり読み込んだりする際に、すべてのノードやレプリカが同じデータビューを持つことを保証する性質を指します。したがって、ここではCAPの定理でいう一貫性について話している。

現代の世界では、大規模なオンラインビジネスに対応するため、複数のレプリカが一般的に採用されている。例えば、オンライン電子商取引大手のアマゾンは、システム・クラッシュや障害発生時にシステムの高い可用性を確保するために、複数のデータ・センター、ゾーン、あるいは国にまたがって注文やSKUデータを複製している。このため、システムには複数のレプリカ間でのデータの一貫性という課題が生じる。一貫性がないと、アマゾンのカートで削除された商品が再び表示される可能性が非常に高く、非常に悪いユーザー体験を引き起こします。

したがって、アプリケーションごとに異なるデータ一貫性レベルが必要になる。そして幸運なことに、AIのためのデータベースであるMilvusは、一貫性レベルに柔軟性を提供しており、あなたのアプリケーションに最適な一貫性レベルを設定することができます。

Milvusベクトル・データベースにおける一貫性

整合性レベルの概念は、Milvus 2.0のリリースで初めて導入されました。Milvusの1.0バージョンは分散ベクタデータベースではなかったため、一貫性のレベルを調整することはできませんでした。Milvus1.0は毎秒データをフラッシュしていたため、新しいデータが挿入されるとほぼ即座に表示され、Milvusはベクトルの類似性検索やクエリ要求が来た時点で最新のデータビューを読み込む。

しかし、Milvusは2.0バージョンでリファクタリングされ、Milvus 2.0はpub-subメカニズムに基づく分散ベクトルデータベースであるPACELCの定理は、分散システムは一貫性、可用性、待ち時間の間でトレードオフしなければならないことを指摘している。さらに、異なる一貫性レベルは異なるシナリオに対応する。そのため、Milvus 2.0では一貫性の概念が導入され、一貫性のレベルを調整できるようになった。

Milvusベクトルデータベースの4つの一貫性レベル

Milvusは、strong、bounded staleness、session、eventualの4つの一貫性レベルをサポートしています。そして、Milvusのユーザは、コレクションを作成するとき、またはベクトル類似検索や クエリを行うときに、一貫性レベルを指定することができます。このセクションでは、これら4つの一貫性レベルがどのように異なり、どのシナリオに最適であるかを説明します。

強い

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

Strong 強い

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

境界的陳腐性

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

Bounded_staleness Bounded_staleness

Bounded_stalenessは、検索レイテンシを制御する必要があり、散発的なデータの不可視性を許容できるシナリオに適している。例えば、ビデオ推薦エンジンのような推薦システムでは、たまにデータが見えなくなることは、全体的な想起率に与える影響は本当に小さいですが、推薦システムのパフォーマンスを大幅に向上させることができます。例としては、オンライン注文のステータスを追跡するアプリがある。

セッション

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

Session セッション

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

最終的な

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

Eventual 最終的一貫性

しかし、PACELCの定理によれば、一貫性を犠牲にすることで、検索レイテンシを大幅に短縮することができる。従って、偶発的一貫性は、データの一貫性に対する要求は高くないが、高速な検索性能が要求されるシナリオに最適である。例えば、アマゾンの商品のレビューや評価を偶発的一貫性で検索するような場合である。

おわりに

冒頭の質問に戻りますが、削除されたデータが検索結果として返されるのは、ユーザーが適切な一貫性レベルを選択していないためです。milvusベクトル・データベースでは、一貫性レベルのデフォルト値はbounded staleness (Bounded)である。そのため、データの読み込みが遅れ、類似検索やクエリー中に削除操作を行う前にMilvusがデータビューを読み込んでしまうことがあります。しかし、この問題は簡単に解決できます。コレクションを作成するとき、またはベクトル類似検索やクエリを実行するときに一貫性レベルを調整するだけです。簡単です!

次回は、Milvusベクトルデータベースがどのようにして様々な一貫性レベルを実現しているのか、そのメカニズムを明らかにし、解説します。ご期待ください!

次の記事

Milvus 2.1の正式リリースに伴い、新機能を紹介する一連のブログを用意しました。このブログシリーズの続きを読む

Try Managed Milvus for Free

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

Get Started

Like the article? Spread the word

続けて読む