以前に 大量のエンティティを処理するデザインパターン - GeekFactory を紹介しましたが、シングルスレッドのバッチ処理なのでスループットが頭打ちになる問題がありました。コンカレントに処理する方法を思いついたので実装してみました。 シングルスレッドではこんな流れでした。 S3QueryResultListでn件のエンティティを取得する。 エンティティをバッチ処理する。 t秒以内であれば上記を繰り返す。 次のタスクにカーソルを渡す。 ここで、エンティティを取得するタスク(Splitter)とエンティティをバッチ処理するタスク(Mapper)を分けてみます。 Splitterタスク S3QueryResultListでn件のエンティティを取得する。 エンティティをmemcacheに入れて*1、Mapperタスクに渡す。 t秒以内であれば上記を繰り返す。 Mapperタスク memcac