1

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

1 に答える 1

2

ミューテーションプールはマッパーごとですが、mapreduceが完了すると、コールバックはマッパーの外部で実行されます。その結果、コールバックが実行されるまでにすべてのミューテーションプールがフラッシュされることが期待できます。

于 2011-03-22T01:41:59.860 に答える