View a markdown version of this page

テーブルとベクトルインデックス間のデータ同期 - Amazon DynamoDB

テーブルとベクトルインデックス間のデータ同期

DynamoDB は、ベクトルインデックスをベーステーブルと自動的に同期させます。同期の仕組みを理解すると、検索結果が完了するタイミングと、項目が結果に表示されない理由を予測するのに役立ちます。

既存のテーブルにインデックスをバックフィルする

既に項目を含むテーブルにベクトルインデックスを追加すると、DynamoDB は既存のデータを使用してインデックスをバックフィルします。DynamoDB がインデックスのインフラストラクチャをプロビジョニングしている間、インデックスは最初に IndexStatus CREATING に移行します。DynamoDB が既存のベーステーブルデータからインデックスを入力する間は CREATING のままになり、そのフェーズ中は true として Backfilling がレポートされます。ベーステーブルへの新しい書き込みはバックフィル中にインデックスにレプリケートされますが、バックフィルが完了するまで SearchVectors は ValidationException を返します。インデックスの準備が完了すると、IndexStatus は ACTIVE になり、Backfilling フィールドはレポートされなくなります。DescribeTable を使用して、IndexStatus が ACTIVE になり、Backfilling が true でなくなるまで待ってから検索します。

バックフィルの所要時間を左右するのは、ベーステーブルの項目数ではなく、インデックスの構築です。項目数が非常に少ないテーブルでも、バックフィルが完了するまでにかなりの時間がかかることがあります。小さなテーブルがすぐに準備完了になると想定するのではなく、DescribeTable をポーリングしてください。

「ベクトルインデックスの既存テーブルへの追加」を参照してください。

継続的な書き込み同期

インデックスがアクティブになると、DynamoDB はベーステーブルへの各書き込みをベクトルインデックスにレプリケートします。次の動作は、書き込みがインデックスに到達するかどうか、およびその到達方法に影響します。

  • 有効なベクトル属性が含まれている場合にのみ、項目がインデックスにレプリケートされます。インデックスがパーティションキーを定義している場合、項目にはそのパーティションキー属性も含まれている必要があります。含まれていない場合、書き込みはベーステーブルで成功しますが、項目はインデックスにレプリケートされません。

  • ベクトル値は書き込まれたとおりにベーステーブルに保存されますが、インデックスには 32 ビット浮動小数点 (f32) の精度で保存されます。精度の高い値は、インデックスにレプリケートされるとその精度を失います。

  • 項目からベクトル属性を削除するか、項目を削除すると、対応するエントリがインデックスから削除されます。

書き込み検証ルールの完全なセットについては、「ベクトルデータを含む項目の書き込み」を参照してください。

リージョン間の同期

ベクトルインデックスを持つテーブルがグローバルテーブルの場合、DynamoDB はいずれかのレプリカリージョンへの書き込みを他のリージョンにレプリケートし、そこにインデックスを作成します。DynamoDB は、データをベクトルインデックスに非同期的にレプリケートします。あるリージョンで書き込んだベクトルは、テーブルがマルチリージョンの強力な整合性 (MRSC) を使用している場合でも、別のリージョンの SearchVectors 結果にすぐには表示されない場合があります。「グローバルテーブルでのベクトルインデックスの使用」を参照してください。