新しいドキュメントよりもベクトルインデックスのセグメントが速く増える原因は何ですか?

エヴァ・ウォン は テクニカルライター であり ZimaSpaceの常駐ティンカーでもあります。 生涯のオタクであり、 ホームラボとオープンソースソフトウェアに情熱を持っています。彼女は複雑な技術的概念をわかりやすく、 実践的なガイドに翻訳することを専門としています。エヴァはセルフホスティングは楽しくあるべきで、怖がるものではないと信じています。彼女のチュートリアルを通じて、コミュニティが ハードウェアのセットアップを解明する手助けをしています。初めてのNAS構築からDockerコンテナの習得まで。

取り込み時に多数の小さな不変バッチがフラッシュされたり、コンパクションで置換レコードと削除済みレコードを速やかに統合できなかったりすると、ベクトルインデックスのセグメントはドキュメントより速く増加します。

1つの家庭用PDFから数百のチャンクが生成されることがあり、更新時には新しいベクトルに加えて古いベクトル用のトゥームストーンが書き込まれる場合があります。頻繁なコミット、複数のベクトルフィールド、メタデータインデックス、レプリカ、再試行による世代ごとに、ドキュメント数を超える物理構造が作成されます。バックグラウンドのコンパクションが遅れると、これらの小さなセグメントが残り、ライブラリの増加より速く蓄積します。

フラッシュポリシーによって小さな取り込みバッチがセグメントに変換される

多くのインデックスは書き込みをメモリにバッファリングし、サイズ、時間、トランザクション、またはメモリのしきい値に達すると不変のセグメントを確定します。ファイルやチャンクごとにコミットするウォッチャーは、容量不足のセグメントを多数作成する可能性があります。この違いは、その後の家庭環境でのテストでも確認できます。

不変インデックスコンポーネントの解説では、書き込みに最適化されたツリーがメモリ内のデータを複数の追記専用コンポーネントへフラッシュする仕組みが示されています。ベクトルストアの内部実装は異なりますが、セグメント増加の傾向は同じです。つまり、セグメントの作成数はドキュメント数ではなく、フラッシュ回数に連動します。

セグメントあたりのベクトル数とフラッシュ理由を比較します。小さく、一定間隔で生成されるセグメントは、コミット頻度またはメモリしきい値が原因であることを示します。バルクインポート時だけ大きなセグメントが生成される場合は、通常の取り込み構造です。自動化を進める前に、中間結果を検証できる状態にしておく必要があります。

更新とトゥームストーンによって新規ドキュメント数を超えるレコードが生成される

1つのファイルを置き換えると、新しいチャンクをすべて書き込み、クリーンアップが行われるまでトゥームストーンや古いベクトルを保持する場合があります。メタデータ、スパース、密ベクトル、量子化表現は別々のセグメントファミリーに保存されることがあり、各ファミリーはレプリカによってさらに増加します。この境界は、現実的な運用条件で個別に測定する必要があります。

セグメントサイズのトレードオフに関する詳細な解説では、セグメントサイズがファイル数や読み取り・コンパクションの挙動をどのように変えるかが説明されています。重要な分母は、ソースドキュメント数ではなく、物理レコード数とレプリカ数です。実際の影響は、複数のソースが限られたコンテキストを奪い合うときに現れます。

数の傾向としては、実質的なドキュメント数が少ないにもかかわらず、書き込みベクトル数と削除済みベクトル数が多くなります。トゥームストーンが増加しているのにセグメント数が安定している場合は、新たに確定されたセグメントが多すぎる問題とは異なります。この依存関係は、最終インターフェースでも明示しておく必要があります。

コンパクションの滞留とビルド失敗によって統合が妨げられる

コンパクションでは、セグメントを読み取り、置換データを書き込むために、空き容量、I/O帯域幅、CPU、途切れのない処理時間が必要です。スナップショット、クエリ負荷、ディスク容量不足、クラッシュ、スケジューリング制限によって、入力セグメントの廃棄が遅れることがあります。そのため、結果を元の証拠と照合する必要があります。

セグメント指向コンパクションの滞留に関する技術的な解説では、セグメント指向コンパクションと、読み取り・書き込み増幅のトレードオフが説明されています。これは、コンパクションポリシーをインデックスデータの存続期間や更新パターンに合わせる必要がある理由を示しています。この違いは、その後の家庭環境でのテストでも確認できます。

正常なマージ中に一時的なセグメント急増が起きる場合、それは障害の境界です。古いセグメントが正常なコミット後や猶予期間後も残っている場合、または滞留時間と読み取り増幅が増え続けている場合にのみ、増殖を診断します。自動化を進める前に、中間結果を検証できる状態にしておく必要があります。

ドキュメント、ベクトル、セグメント、コンパクションジョブを照合する

各取り込みトランザクションについて、ソースドキュメント、チャンク、密ベクトルとスパースベクトル、メタデータレコード、トゥームストーン、レプリカ、フラッシュ理由、セグメントサイズ、コンパクションの入力と出力、放棄されたビルド、スナップショット参照、空き容量、滞留の最古の経過時間を記録します。この境界は、現実的な運用条件で個別に測定する必要があります。

ベクトルインデックス構造を使って、ベクトル数と検索コストの関係を確認します。同じコンテンツセットを維持したまま、バルクコミットとファイルごとのコミット、1つのドキュメントの更新、削除と再追加、コンパクションの一時停止、再起動をテストします。実際の影響は、複数のソースが限られたコンテキストを奪い合うときに現れます。

コンパクション後にセグメント数が期待される水準へ戻り、保持されているすべてのセグメントに有効なマニフェスト、スナップショット、または保留中のマージが存在すれば合格です。放棄された世代を削除し、レプリカによる増加要因を説明した後でのみ、フラッシュサイズやコンパクションリソースを調整します。

テック&AIハブ

もっと読む

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.