大量データを扱う際に気にするといい(かもしれない)チェックポイント
いままで教えてもらったことを忘れないうちに軽くメモっておく。MB単位のデータだったら気にする必要はそんなに無いと思うけどGB以上になってくるといろいろ考えること増えるのよね。
- シングルスレッドで処理するのではなくマルチスレッドでの処理を検討する。
- シングルプロセスで処理するのではなくマルチプロセスでの処理を検討する。例:fluentdの複数実行 - wyukawa’s blog
- シングルプロセスで処理するのではなくMapReduceでの処理を検討する。
- ただしMapReduceの処理で状態を持つとOutOfMemoryになる危険性があるので必要に応じてflushすることを検討する。例:入力データの性質によってはOutOfMemoryになってしまうHBaseへのデータ投入用のReduceタスクをどうすべきか? - wyukawa’s blog
- ひとつひとつ処理するのではなくまとめて処理することを検討する。例:Redisでのbulk処理 - wyukawa’s blog
ざっくりいうと並列度を上げるとかまとめて処理するとかそういう方向になるのかな。
上記のことをやるとどうしても方式が複雑になるしコードの可読性が下がるのは避けられないと思うけど、大量データを処理するには必要なんだよね。