グローバルテーブルでのベクトルインデックスの使用
グローバルテーブルでベクトルインデックスを使用して、複数の AWS リージョンで類似度検索を実行できます。ベクトルインデックスを持つテーブルにレプリカを追加すると、DynamoDB はベクトルインデックスの定義を新しいレプリカリージョンに自動的にレプリケートします。リージョンごとに個別にベクトルインデックスを作成することはありません。任意のレプリカリージョンで書き込んだ項目は、他のリージョンにレプリケートされ、そこにインデックスが付けられるため、SearchVectors はローカルリージョンから結果を返します。
ベクトルインデックスは、すべてのグローバルテーブル設定で使用できます。
-
マルチリージョンの結果整合性 (MREC) – グローバルテーブルのデフォルトの整合性モード。詳細については、「マルチリージョンの結果整合性 (MREC)」を参照してください。
-
マルチリージョンの強力な整合性 (MRSC) – リージョン間で強力な整合性のある読み込みを提供する整合性モード。詳細については、「マルチリージョンの強力な整合性 (MRSC)」を参照してください。
-
マルチアカウントグローバルテーブル – AWS アカウント間でレプリケートするグローバルテーブル。詳細については、「DynamoDB マルチアカウントグローバルテーブル」を参照してください。
MRSC は同一アカウント内の設定のみをサポートしているため、マルチアカウントグローバルテーブルでは常に MREC が使用されます。これはグローバルテーブルの制約であり、ベクトルインデックスの制限ではありません。
次の例では、us-west-2 リージョンのレプリカを、ベクトルインデックスが既にある Products という名前のテーブルに追加します。このテーブルでは、ベクトルインデックスとこの例の両方に必要なオンデマンドキャパシティモードを使用する必要があります。
aws dynamodb update-table \ --table-name Products \ --region us-east-1 \ --replica-updates '[{"Create": {"RegionName": "us-west-2"}}]'
レプリカの作成中、ソーステーブルのステータスは UPDATING で、レプリカの ReplicaStatus は CREATING です。DescribeTable を使用して、レプリカが ACTIVE になり、ベクトルインデックスがレプリケートされたことを確認します。レプリカリージョンは、ソースリージョンと同じベクトルインデックス名、ディメンション、距離関数、射影を報告します。
aws dynamodb describe-table \ --table-name Products \ --region us-west-2
レプリカがアクティブになったら、ソースリージョンと同じベクトルセットを使用して、レプリカリージョンに対して SearchVectors を実行できます。レプリカリージョンで検索する前に、そのリージョンで DescribeTable を使用し、ベクトルインデックスのバックフィルが完了したことを確認します。IndexStatus は ACTIVE で、Backfilling は false です。レプリカのベクトルインデックスは個別にバックフィルされるため、レプリカ自体がアクティブになってからしばらくの間はバックフィルが続く場合があります。ベクトル検索では近似最近傍 (ANN) が使用されるため、同じデータであっても、同じクエリに対してリージョン間でランク付けがわずかに異なる場合があります。
aws dynamodb search-vectors \ --table-name Products \ --region us-west-2 \ --index-name ProductEmbeddingIndex \ --search-vector '[{"N": "0.1234"}, {"N": "-0.5678"}, {"N": "0.9012"}, ...]' \ --top-k 10
レプリケーション遅延がクロスリージョンの検索結果に影響する
ベクトルインデックスは、マルチリージョンの強力な整合性 (MRSC) グローバルテーブルであっても、リージョン間で非同期に伝播します。あるリージョンで書き込んだベクトルが、別のリージョンの SearchVectors 結果にすぐには反映されない場合があります。最新の書き込みを読み取るには、書き込みが行われたのと同じリージョンに検索を送信します。