2009年2月10日

ヤフオク!

MySQLによるデータウェアハウス構築

  • このエントリーをはてなブックマークに追加
こんにちは、オークション事業部のWangです。

データウェアハウス(以下DWH)という言葉になじみのない方は検索していただいたほうがよいかもしれません。
検索するのがめんどい、という方は、かみ砕いた表現ができなくて恐縮ですが、
基幹系システムから抽出したデータを目的をもって再構成し、
使用可能な状態に保管されたデータの集合体、とお考えください。
オークションでは、具体的には出品、入札、落札などのトランザクションデータや、
それをいろいろな単位で集計したデータなどが該当します。
ここでいう単位というのはたとえば、日ごと、週ごと、月ごとや、以前の記事でも紹介されている
カテゴリといったものになります。

こういったデータは、運用、運営、企画立案などにきわめて重要なのですが、今回はtechblogですので、
活用ではなく、構築の観点から、お話したいと思います。

DWHを構築する際には、通常リレーショナルデータベース(以下RDB)を使用します。
ビジネス用途でRDBというと、OracleやSQL Severといった商用RDB(要するに有償)が一般的で、
私もヤフー入社まではOracle一辺倒だったのですが、現在はMySQLを採用しています。
もちろんMySQLはopen sourceであることからコストメリットは非常に大きいのですが
(特に直接サービスに寄与しない情報系システムへの投資は慎重にならざるを得ないケースが多いですし)
機能面にも採用するに足る理由があります。

MySQLの特徴として、ストレージエンジン(テーブルの種類)のバリエーションが豊富であるということが
まずあげられます。
中でも、DWHに使用するのであれば、MyISAMの右に出るものはないでしょう。
DWH構築では、ELTプロセスという言葉がよく使われます。
下に図示しますが、MyISAMはこの中でLoad 、つまりDWHへのデータの取込をはじめとする更新処理が
非常に早いのです。

ELT Process

MyISAMには
(1)トランザクションをサポートしない
(2)行単位のロックを受け付けない(テーブル単位になる)
(3)1テーブルごとに物理的に拡張子frm 、MYI 、MYDの3ファイルが作成される。
といった特徴があります。
更新処理が高速であるという特性に、(1)、(2)は大きく寄与しているのです。
普通のRDBに慣れた感覚では、トランザクションをサポートしない、すなわち
コミット/ロールバックができないなど、ありえん! 
となるところですが、DWHの構築はバッチ処理で行われるケースが一般的ですので、実は問題ありません。
処理をやり直したいのであれば、データを丸ごと消して最初からやり直せばよいのです。
(もちろん、それが可能であるように論理設計をしておくことが必要ですが)
同様の理由で、(2)の点もまず障害にはならないと思います。

大規模DWHを構築する上で、個人的にもっとも重宝しているのが(3)の点です。

MyISAM

実際ヤフーオークションのデータはなかなか大量であるため、単一サーバーで処理していると
時間がかかりすぎてしまうことがままあります。
そういった場合、複数の更新用サーバーを用意しておき、そちらで取り込みやマッピングの処理を行い、
完了したところで、参照用のストレージに各ファイルを丸ごとコピーしてくれば、
ファイル操作のみでデータの同期が可能になるのです。
(実際には、テーブルのフラッシングなどのおまじない、が必要ですが)

また、行き届いたことに同じ形式で定義された複数のMyISAMテーブルをひとつのテーブルとして
参照可能にするMRG_MyISAMというストレージエンジンも用意されていますので
集計などのクエリはそちらに対して発行すればよい、ということになります。

MyISAM


ということでほんの一例に過ぎませんが、MySQLの特性を生かしたDWH構築手法を
紹介させていただきました。
もちろんMyISAMもバッチ処理専用ではなく、使いようによっては十分オンライン処理にも耐えられます。
また、MySQLにはトランザクション機能をサポートしたInnoDBをはじめ、さまざまなエンジンがあります。
データベースに興味のお持ちの方は、一度お試しになってはいかがでしょうか? 

なんだかMySQLをえらく持ち上げているようですが、念のため、私はMySQLの関係者ではありません。
が、つね日ごろお世話になってますので、恩返しになれば、という気持ちはちょっとあります。
また機会があればお会いしましょう。
今後とも、Yahoo!オークションをよろしくお願いいたします。

Yahoo! JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。

  • このエントリーをはてなブックマークに追加