2011-03-21 65 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

突變池是每個映射器,而回調映射器外部運行一次映射精簡完成。因此,您可以預期,在您的回調運行時,所有突變池都會被刷新。

相關問題