在回调之前,DatastoreMutationPool是否刷新到数据存储区?

时间:2011-03-21 13:28:03

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

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

感谢。

mapper示例:

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
    ...
}

1 个答案:

答案 0 :(得分:2)

变异池是per-mapper,而mapreduce完成后,回调将在映射器外部运行。因此,您可以预期,在回调运行时,所有突变池都将被刷新。