表与向量索引之间的数据同步
DynamoDB 会自动保持向量索引与其基表的同步。了解同步的工作方式有助于您预测搜索结果何时是完整的,以及为什么某个项目可能不会出现在结果中。
在现有表上回填索引
向已包含项目的表添加向量索引时,DynamoDB 会使用现有数据回填索引。DynamoDB 预调配索引基础设施时,索引会首先转换为 IndexStatus CREATING。当 DynamoDB 从现有基表数据填充索引期间,它保持 CREATING 状态,并在该阶段将 Backfilling 报告为 true。在回填阶段,对基表的新写入将复制到索引中,但在回填完成之前,SearchVectors 会返回 ValidationException。当索引准备就绪时,IndexStatus 将变为 ACTIVE,将不再报告 Backfilling 字段。使用 DescribeTable,等待 IndexStatus 变为 ACTIVE 且 Backfilling 不为 true 后,再执行搜索。
索引构造决定回填持续时间,而非基表中的项目数量。即使项目数量极少的表,也可能需要相当长的时间才能完成回填。轮询 DescribeTable,而不是假设小型表会很快准备就绪。
请参阅将向量索引添加到现有表。
持续进行的写入同步
索引处于活动状态后,DynamoDB 会将对基表的每个写入复制到向量索引中。以下行为会影响写入是否到达索引以及如何到达索引:
-
项目只有在包含有效的向量属性时,才会被复制到索引中。如果索引定义了分区键,则项目还必须包含该分区键属性;否则,在基表上写入会成功,但项目不会复制到索引中。
-
向量值按写入格式存储在基表中,但以 32 位浮点数(f32)精度存储在索引中。超过此精度的值,在复制到索引时会丢失精度。
-
当您从项目中删除向量属性或者删除项目时,对应的条目将从索引中移除。
有关完整的写入验证规则集合,请参阅写入带有向量数据的项目。
跨区域同步
当具有向量索引的表是全局表时,DynamoDB 会将任何副本区域中的写入复制到其他区域,并在其他区域中编制索引。DynamoDB 以异步方式将数据复制到向量索引。即使表使用多区域强一致性(MRSC),您在一个区域中写入的向量也不会立即出现在另一个区域的 SearchVectors 结果中。请参阅在全局表中使用向量索引。