2011-03-21 64 views
1

我正在使用mapreduce,并且当它们不在数据存储中时,我需要坚持一些实体。我将新实体添加到DatastoreMutationPool,因此这些实体可以通过批处理调用持续保存。当mapreduce结束时,调用一个回调函数。回调函数将使用其中一些实体。我的问题是,在调用回调函数之前,它们的所有实体是否都会刷新到数据存储区,或者它们仍然可以位于DatastoreMutationPool中,但不在数据存储区中。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 
    ... 
} 

回答

2

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

相关问题