【问题标题】:Is DatastoreMutationPool flushed to the datastore before the callback?DatastoreMutationPool 是否在回调之前刷新到数据存储区?
【发布时间】:2011-03-21 13:28:03
【问题描述】:

我正在使用 mapreduce,当某些实体不在数据存储区中时,我需要保留它们。我将新实体添加到 DatastoreMutationPool 中,以便这些实体可以通过批处理调用进行持久化。当 mapreduce 结束时,将调用回调函数。回调函数将使用其中一些实体。我的问题是,在调用回调函数之前是否会将所有实体刷新到数据存储区,或者它们仍然可以在 DatastoreMutationPool 但不在数据存储区中。

谢谢。

映射器示例:

public class MyMapper extends AppEngineMapper<Key, Entity, NullWritable, NullWritable> {
     @Override
     public void map(Key key, Entity value, Context context) {
         ...
         DatastoreMutationPool mutationPool = this.getAppEngineContext(context).getMutationPool();
     mutationPool.put(entity);
     }
}

回调示例:

@RequestMapping(value="/callback/function",method=RequestMethod.POST)
public void callback(@RequestParam("job_id") String jobIdName){
    JobID jobId = JobID.forName(jobIdName);
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    //search for some entities persisted in the mapper
    ...
}

【问题讨论】:

    标签: java google-app-engine callback mapreduce low-level-api


    【解决方案1】:

    突变池是每个映射器的,而一旦 mapreduce 完成,回调就会在映射器之外运行。因此,您可以预期,在您的回调运行时,所有突变池都将被刷新。

    【讨论】:

      猜你喜欢
      • 2022-11-18
      • 1970-01-01
      • 2019-05-19
      • 2014-06-30
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 2014-07-13
      • 2023-03-19
      相关资源
      最近更新 更多