如何使用mapreduce批量更新满足查询的数据存储区实体?

Pri*_*ice 6 java google-app-engine mapreduce blobstore google-cloud-datastore

我想使用mapreduce库来更新满足查询的所有实体.有几个并发症:

  1. 查找要更新的实体的查询检查特定属性"property1"的值是否包含在来自csv文件的长值列表(~10000个条目)中
  2. 对于满足查询的每个实体,需要将另一个属性"property2"更新为等于第二列中的值和csv文件的同一行

我知道如何将csv文件上传到Blobstore并使用Blobstore输入阅读器读取每一行.我也知道使用查询获取实体的数据存储区输入阅读器.

我的问题是如何创建一个Mapper类,从Blobstore读取输入数据,获取数据存储区实体并尽可能高效地更新它们?

mar*_*one 3

鉴于property1的可能值列表很长,使用查询来过滤似乎不是一个好的选择(因为您需要使用 IN 过滤器,它实际上为每个值运行一个查询

使用 MR 的另一种方法是使用 Map (从property1property2)将 CSV 加载到内存中,然后触发迭代所有实体的 MR 作业,如果它们的property1是 Map 上的键的一部分,请使用映射值。

正如 @Ryan B 所说,如果您只想利用批量放置,则不需要为此使用 MR,因为您可以使用 DatastoreService 来使用批量Iterable放置