如果实体之前有未编制索引的数据,那么索引在Google应用数据存储中的工作方式如何?

时间:2016-09-21 06:14:04

标签: google-app-engine google-cloud-datastore app-engine-ndb

我在ndb datatstore有一张桌子。我有

updated = ndb.DateTimeProperty(auto_now_add=True, indexed=False)
created = ndb.DateTimeProperty(auto_now_add=True, indexed=False)

通过这种结构,我在表格中有很多记录。现在我正在更新未编入索引的字段indexed=True。那么,它会索引该表中迄今为止存在的所有updatedcreated数据,还是会在索引后开始索引要填写的数据?

如何索引这些列的未编入索引的行?

1 个答案:

答案 0 :(得分:2)

在您启用索引的情况下重写这些属性之前,这些属性不会在现有实体上建立索引。这是因为索引是按实体级别设置的。

为确保您索引所有这些字段,您需要读取每个实体,然后将其写回。对于较小的数据集,您可以通过简单的查询和循环来实现。对于较大的数据集,您需要探索类似Cloud Dataflow的内容。

如果您有大型数据集并且关注成本,则可以进行一些优化。例如,对索引字段执行仅密钥查询,然后如果任何读取实体与该列表匹配,则不要将其写回(因为它已经被索引)。