

# 表与向量索引之间的数据同步
<a name="VectorSearchDataSync"></a>

DynamoDB 会自动保持向量索引与其基表的同步。了解同步的工作方式有助于您预测搜索结果何时是完整的，以及为什么某个项目可能不会出现在结果中。

## 在现有表上回填索引
<a name="VectorSearchDataSync.Backfilling"></a>

向已包含项目的表添加向量索引时，DynamoDB 会使用现有数据回填索引。DynamoDB 预调配索引基础设施时，索引会首先转换为 `IndexStatus` `CREATING`。当 DynamoDB 从现有基表数据填充索引期间，它保持 `CREATING` 状态，并在该阶段将 `Backfilling` 报告为 `true`。在回填阶段，对基表的新写入将复制到索引中，但在回填完成之前，`SearchVectors` 会返回 `ValidationException`。当索引准备就绪时，`IndexStatus` 将变为 `ACTIVE`，将不再报告 `Backfilling` 字段。使用 `DescribeTable`，等待 `IndexStatus` 变为 `ACTIVE` 且 `Backfilling` 不为 `true` 后，再执行搜索。

索引构造决定回填持续时间，而非基表中的项目数量。即使项目数量极少的表，也可能需要相当长的时间才能完成回填。轮询 `DescribeTable`，而不是假设小型表会很快准备就绪。

请参阅[将向量索引添加到现有表](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Create.ExistingTable)。

## 持续进行的写入同步
<a name="VectorSearchDataSync.OngoingWrites"></a>

索引处于活动状态后，DynamoDB 会将对基表的每个写入复制到向量索引中。以下行为会影响写入是否到达索引以及如何到达索引：
+ 项目只有在包含有效的向量属性时，才会被复制到索引中。如果索引定义了分区键，则项目还必须包含该分区键属性；否则，在基表上写入会成功，但项目不会复制到索引中。
+ 向量值按写入格式存储在基表中，但以 32 位浮点数（f32）精度存储在索引中。超过此精度的值，在复制到索引时会丢失精度。
+ 当您从项目中删除向量属性或者删除项目时，对应的条目将从索引中移除。

有关完整的写入验证规则集合，请参阅[写入带有向量数据的项目](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Write)。

## 跨区域同步
<a name="VectorSearchDataSync.GlobalTables"></a>

当具有向量索引的表是全局表时，DynamoDB 会将任何副本区域中的写入复制到其他区域，并在其他区域中编制索引。DynamoDB 以异步方式将数据复制到向量索引。即使表使用多区域强一致性（MRSC），您在一个区域中写入的向量也不会立即出现在另一个区域的 `SearchVectors` 结果中。请参阅[在全局表中使用向量索引](VectorSearchGlobalTables.md)。