如果实体之前有未索引的数据,索引在 google 应用程序数据存储中如何工作?
How does indexing work in google app datastore if entity have unindexed data earlier?
我在 ndb datatstore
中有一个 table。因为我有
updated = ndb.DateTimeProperty(auto_now_add=True, indexed=False)
created = ndb.DateTimeProperty(auto_now_add=True, indexed=False)
有了这个结构,我在 table 中有很多记录。现在我正在更新未索引的字段 indexed=True
。那么,它会索引所有 updated
和 created
迄今为止在 table 中存在的数据,还是会在索引后开始索引要填充的数据?
如何为这些列的未索引行编制索引?
这些属性不会在现有实体上建立索引,除非您在启用索引的情况下重写它们。这是因为索引是在每个实体级别设置的。
为确保索引所有这些字段,您需要读取每个实体,然后将其写回。对于较小的数据集,您可以通过简单的查询和循环来实现。对于更大的数据集,您将需要探索 Cloud Dataflow 之类的东西。
如果你有一个大数据集并且担心成本,你可以做一些优化。例如,对索引字段进行仅键查询,然后如果任何读取的实体与该列表匹配,则不要将其写回(因为它已经被索引)。
我在 ndb datatstore
中有一个 table。因为我有
updated = ndb.DateTimeProperty(auto_now_add=True, indexed=False)
created = ndb.DateTimeProperty(auto_now_add=True, indexed=False)
有了这个结构,我在 table 中有很多记录。现在我正在更新未索引的字段 indexed=True
。那么,它会索引所有 updated
和 created
迄今为止在 table 中存在的数据,还是会在索引后开始索引要填充的数据?
如何为这些列的未索引行编制索引?
这些属性不会在现有实体上建立索引,除非您在启用索引的情况下重写它们。这是因为索引是在每个实体级别设置的。
为确保索引所有这些字段,您需要读取每个实体,然后将其写回。对于较小的数据集,您可以通过简单的查询和循环来实现。对于更大的数据集,您将需要探索 Cloud Dataflow 之类的东西。
如果你有一个大数据集并且担心成本,你可以做一些优化。例如,对索引字段进行仅键查询,然后如果任何读取的实体与该列表匹配,则不要将其写回(因为它已经被索引)。