さて、次はバッチ処理について考えてみます。
小さなデータサイズのバッチ処理であれば扱いも手軽ですし、リレーショナルデータベースで特に困ることもなく十分だと思います。ただし、扱うデータサイズが大きくなってくると、だんだんとリレーショナルデータベースでは処理を行うのが難しくなってきます。
こういったバッチ処理では、データをまとめて取り出したり、大量のデータをまとめて処理したりするといったことを高速に行うことが求められます。こういった要求に対しては、以下のようなことが条件として必要でしょう。
まず、データサイズが大きくなった場合、バッチ処理を行うにしてもそもそもデータの読み込みに時間がかかるという問題があります。データの読み込みは思った以上に膨大な時間がかかってしまうものなのです。
データの読み込みは時間がかかりますが、スケールアップもしくはスケールアウトすることで高速化できます。リレーショナルデータベースであればスケールアップすることで高速化することは可能ですが、コストがかかります。一方、Hadoopであればスケールアウトすることでコストも抑えつつ高速化することができます。今後もデータが増え続けていくであろうことを考えれば、Hadoopを使ってスケールアウトすることでどんどん読み込み性能を上げていける方が現実的な案でしょう。
バッチ処理であればデータサイズがどんどん大きくなることは当然考えておいたほうが良いでしょう。最初はデータが少なくてすぐに終わっていたような処理でも、気がついたら何時間も、ひどいときには1日以上かかるような処理になってしまうことも珍しくありません。データサイズが大きくなっても困らないように、処理性能がスケールできる設計になっている必要があります。
この場合、Hadoopはそもそも台数を増やせばスケールする前提で作られているため、特に問題はないでしょう。一方、リレーショナルデータベースも台数を増やせば処理性能はスケールするのですが、それはあくまでも細かな処理を同時に複数さばけるようになる、という意味でのスケールです。巨大なデータの処理を行おうとすると、それらを細かなタスクに分解する仕組みがないため、処理は結局のところ特定のサーバに集中してしまいます。つまり、特定のサーバの性能に依存してしまうため、スケールできているとは言えません(図2-7)(図2-8)。
このように、特定のデータをピンポイントで読み出すようなランダムアクセスにはリレーショナルデータベースが向いており、バッチ処理のような大規模データ解析ではシーケンシャルアクセスに向いているHadoopが力を発揮します。それぞれの特徴をまとめるとこのようになるでしょうか(表2-1)。
リレーショナルデータベース | Hadoop | |
---|---|---|
スケール方法 | スケールアップ | スケールアウト |
データアクセス | ランダムアクセス | シーケンシャルアクセス |
得意な処理 | リアルタイム処理 | バッチ処理 |
次ページではそんなHadoopの特徴を詳しく見ていきます。
Copyright © ITmedia, Inc. All Rights Reserved.