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

GAE/P: Storing list of keys to guarantee getting up to date data

在我的 Google App Engine 应用程序中,我有大量代表人的实体。在某些时候,我想处理这些实体,拥有最新的数据真的很重要。太多了,不能放在同一个实体组或者做跨组交易。

作为解决方案,我正在考虑将密钥列表存储在 Google 云存储中。我实际上使用此人的电子邮件地址作为键名,因此我可以将电子邮件地址列表存储在文本文件中。

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

  1. 从 Google 云存储中读取文件
  2. 分批遍历文件(比如 100)
  3. 使用ndb.get_multi()获取实体(这将始终提供最新数据)
  4. 处理实体
  5. 重复下一批直到完成

这个过程有什么问题或者有更好的方法吗?

您可能不需要编写自己的解决方案,有许多库可以帮助您在 App Engine 上处理大量实体。 你可以用 map reduce, although the prefered way now is via the Google App Engine Pipeline API.

如果像您在评论中所说的那样,您的列表很少更改并且不能使用祖先(我假设是因为系统其余部分的写入频率),您提出的解决方案会很好用。您可以根据需要执行任意多次 get(multi) 操作,数据存储可以处理它。

既然你提到你可以根据需要处理更新密钥列表,那将是一个很好的方法。 您可以流式读取一个大文件(比如从云存储中每行一行)并使用数据存储异步读取来非常快速地完成或使用 google 云数据流进行读取和 processing/consolidating。 数据流也可用于在云存储中即时生成该密钥列表文件。