big-data-processing

アプリケーション開発の要所 大規模データ処理実践入門

前回は、分散を考慮したMySQLの運用 DBのスケールアウト戦略についてまとめた。ここでは、大規模データ処理実践入門としてMySQLなどで処理できない規模のデータを対象に計算を行いたい場合の対処法について解説する。

1 用途特化型インデクシング

インデックスとシステム構成

RDBMSの限界が見えたときは、バッチ処理でデータを抽出し、別途インデックスサーバを作りWeb API(RPC(Remote Procedure Call))などでクエリするといった対策をとる。

 

用途特化型のインデクシング

はてなでは以上のような方法を「用途特化型のインデクシング」と呼んでいる。用途特化型のインデクシングでは、データを定期的に書き出し、構造化データを保持したサーバをC++で開発、RPCでアクセスする。典型例は以下の3つが挙げられる。

  • キーワードリンク用のTrie(トライ)とCommon Prefix Search(共通接頭辞検索)
  • ブックマークのテキスト分類器(カテゴリ):Complement Naive Bayesアルゴリズム
  • 全文検索エンジン:RDBのデータをバッチで取得し転置インデックスを作って検索アルゴリズムを使う

 

2 理論と実践の両側から取り組む

求められる技術的な要件を見極める

大規模なWebアプリケーションを運用開発するには、理論と実践の両側を取り組む必要がある。例えば配置インデックスのスコアを求めるためには、ベクトル空間モデルのような古典的な理論を使うと簡単にできる。しかし「RDBMSでJOINを使わない」という手法はいわゆるバッドノウハウであり、実践的である。このようにやりたいことを計算機の問題に置き換えて、道筋を見つけられるかが課題となる。

 

最後に

第2回〜第5回と大規模データ処理の知識についてまとめた。重要なことは、ギガバイト単位のデータ処理、メモリ、分散を意識した運用、そして適切なアルゴリズムとデータ構造を選択することである。

次回は、データサイズ、I/O高速化との関係を意識する圧縮プログラミングについて解説する。

[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB DB PRESS plusシリーズ)


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>