DBに保存する前にAmazon KinesisやApatch Stream などのストリーミングサーバー?に保存する理由がわかりません。


大規模なデータ収集といった話になるときに、よくストリーミング処理が必要になり、  
Amazon KinesisやApatch Streamなどの話題が出ます。

複数台のサーバー -> Amazon Kinesis -> Amazon Redshift

といった具合に。

複数台のサーバー -> Amazon Redshift

といったように、複数台のサーバーから直接DBに保存するのはトランザクションの問題？や処理が追いつかなかったりするため、ストリーミング処理をするのだと私の中では認識しております。

ただ、結局、間にストリーミングサーバーを入れたところで、左から右へデータを流しているだけで、結局、処理が追いつかなかったりするのではないかと思っております。

実際はそんなことはなく、ストリーミングサーバーはそこら辺を上手くやっているのかと思われますが、そのあたりの知見をつけたく、調べているのですが、なかなか良い資料が見当たりませんでした。

※一つ、思い浮かぶのは、ある程度、ストリーミングサーバー側でデータをためて、一定以上貯まるとデータをDBへ入れるといったこととかですかね。

皆様のご経験などを踏まえ、ご教授頂けますと幸いです。

宜しくお願いします。




大量のデータソースがデータストアに直接アクセスしていると、

  * データストアに変更を加えるのが非常に困難
  * パフォーマンスがデータソース次第になり管理できない
  * 少量のデータを多数回処理するのはオーバーヘッドが大きい
  * データソース側の処理が肥大する
  * 複数ソースのデータをまとめなければならない場合データストア側でも処理が発生する

などなどたくさんの問題生じます。データソースとデータストアの間にバッファとなる何かがあればこれらの問題は解消しやすくなります。

  * データストアのありかを知っているのはバッファ側なのでそこだけ変更すれば良い
  * バッファからの出力によってパフォーマンスが管理できる
  * データストアごとにオーバーヘッドの少ないデータ投入方法が使える
  * データソース側はバッファにデータを送るだけに特化できる
  * データの変形や集計など中間処理が可能

パフォーマンスはポイントではあるのですがそれがすべてではありません。

