在全局表中使用向量索引
您可以使用向量索引和全局表,在多个 AWS 区域运行相似性搜索。当您将副本添加到具有向量索引的表时,DynamoDB 会自动将向量索引定义复制到新副本区域。您无需在每个区域中单独创建向量索引。您在任何副本区域中写入的项目,都会复制到其他区域并在其中建立索引,因此 SearchVectors 从本地区域返回结果。
您可以在所有全局表配置中使用向量索引:
-
多区域最终一致性(MREC):全局表的默认一致性模式。有关更多信息,请参阅 多区域最终一致性(MREC)。
-
多区域强一致性(MRSC):此一致性模式提供跨区域强一致性读取。有关更多信息,请参阅 多区域强一致性(MRSC)。
-
多账户全局表:跨 AWS 账户复制全局表。有关更多信息,请参阅 DynamoDB 多账户全局表。
多账户全局表始终使用 MREC,因为 MRSC 仅支持同账户配置。这是全局表的约束条件,而不是向量索引的限制。
以下示例将 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 结果中。要读取最近的写入内容,请将搜索请求发送到发生写入的同一个区域。