Python GAE/P:存储密钥列表以确保获取最新数据

Python GAE/P:存储密钥列表以确保获取最新数据,python,google-app-engine,google-cloud-datastore,eventual-consistency,Python,Google App Engine,Google Cloud Datastore,Eventual Consistency,在我的谷歌应用程序引擎应用程序中,我有大量代表人物的实体。在某些时候,我想处理这些实体,拥有最新的数据非常重要。数量太多,无法将其放在同一实体组中或进行跨组交易 作为一个解决方案,我正在考虑在谷歌云存储中存储一个密钥列表。实际上,我使用此人的电子邮件地址作为密钥名,这样我就可以在文本文件中存储电子邮件地址列表 当我想要处理所有实体时,我可以执行以下操作: 从谷歌云存储读取文件 成批迭代该文件,比如说100 使用ndb.get_multi获取实体这将始终提供最新的数据 处理实体 重复下一批,直到完

在我的谷歌应用程序引擎应用程序中,我有大量代表人物的实体。在某些时候,我想处理这些实体,拥有最新的数据非常重要。数量太多,无法将其放在同一实体组中或进行跨组交易

作为一个解决方案,我正在考虑在谷歌云存储中存储一个密钥列表。实际上,我使用此人的电子邮件地址作为密钥名,这样我就可以在文本文件中存储电子邮件地址列表

当我想要处理所有实体时,我可以执行以下操作:

从谷歌云存储读取文件 成批迭代该文件,比如说100 使用ndb.get_multi获取实体这将始终提供最新的数据 处理实体 重复下一批,直到完成
这个过程有什么问题吗?或者有更好的方法吗?

您可能不需要编写自己的解决方案,有很多库可以帮助您在App Engine上处理大量实体。
您可以使用,尽管现在首选的方式是通过。

如果您在评论中说,您的列表很少更改,并且由于系统其余部分的写入频率而无法使用祖先,那么您建议的解决方案会很好地工作。您可以执行任意数量的getmulti,并且数据存储可以处理任意频率的getmulti

既然您提到可以根据需要更新密钥列表,那么这将是一个很好的方法。 您可以以每行一行的方式从云存储中流式读取一个大文件,并使用数据存储异步读取快速完成,或者使用google cloud dataflow进行读取和处理/整合。
数据流还可以用于在云存储中即时生成密钥列表文件。

我关心的是确保获取最新的数据,避免最终的一致性,我认为map reduce无法做到这一点。此外,我没有太多需要map reduce的数据,只是太多的数据无法放入单个实体组或事务中。这并不能回答问题。op是对的。您不能使用MapReduce,因为只有按键获取时才能获得新结果。您的键列表会经常更改吗?如果是这样的话,你是不是在把问题推向确保你有一个非常一致的密钥列表?我不知道这是如何解决你的问题的。您计划如何更新文件?更新文件不是问题。文件在创建新实体之前更新。新实体的创建相对较少。为什么不向所有人添加一个共同的祖先并进行祖先查询呢。如果这看起来不可行,我会加入一些奇怪的东西:碎片祖先。将您的人员实体均匀分布在祖先的碎片上,当您需要最新数据时,祖先会查询这些碎片。这只是一个想法,但可能值得一试。@konqi,这个想法很有趣,但实施起来似乎很复杂。我得多考虑一下。