中国最大のECサイト「タオバオ」のデータベース設計について

 皆さん、明けましておめでとうございます。
 chujiangleiです。今年も宜しくお願い致します。

 昨年のことを振り返ると、2010年は「NoSQL」という言葉をネット上で注目されました。
 データベースの主流はリレーショナルデータベース(RDB)ですが、GoogleAmazonRDBでないDBを使って成功してから、
 RDB以外のDBが注目されるようになりました。「RDB以外のDB」を指す「NoSQL」という言葉が使われ始めました。
 簡単に言えばNoSQLとは、SQL言語を利用しない非リレーショナルデータベース(RDB)を総称した表現です。
 代表的なものとして、数値や文字列といったデータ(value)を1個のキー(key)にひも付けて管理する「key-valueストア」があります。
 NoSQL は、膨大データを高速に処理できるメリットがあるため、FaceBook, Twitterも採用しました。

 2010年6月に日本ヤフーと中国最大のECサイトタオバオ」が、取り扱い商品を相互取引できるサービスをスタートすると発表しました。
 タオバオはC2CとB2CのECサイトを運営し、総取り扱い点数は4億点、ユーザー数は2億人、年間流通総額は約3兆円に上ります。
 Yahoo!ショッピングと合わせると、取り扱い点数は4億5000万点、ユーザー数は2億6000万人、
 流通総額は3兆8000万円と「eBay」を超えて世界最大のECサイトになります。

 このタオバオはNoSQLをカスタマイズする自社用DB「Tair」を開発し、2010年6月30日にオープンソースとして公開されました。
 今回では、「Tair」の構造を説明させて頂きます。

Tairの機能

 C言語に基づき開発したTairはLinux, GPLv2に対応します。
 Tairでは、Key/Valueストアが提供した機能(Get, Put, Delete)以外で、下記の機能を追加しました。

非同期処理

  同時更新のデータを自動マージする機能です。下記の例を通して説明させて頂きます。
  AユーザとBユーザが同時に「"A,B,C"」をゲットしました。
  Aユーザが"D"を追加してデータは「"A,B,C,D"」になりました。
  しかし、Bユーザが"E"を追加してデータは「"A,B,C,E"」になってしまいました。
  非同期処理がないなら、最終の更新結果は「A,B,C,D」、「A,B,C,E」のどちらかになります。
  そうすると、1ユーザの更新データがなくなります。
  Tairでは、ユーザの更新内容を上書きされないようにAユーザとBユーザの更新内容を自動マージして
  更新結果を「"A,B,C,D,E"」にしてくれます。

分散機能

  Tairでは、負荷を軽減するため、サーバに分散処理用のカウンターを設置し、分散ハッシュ表を用いて、
  データを複数のサーバーに、冗長性を持たせながら配置します。これにより、サーバーを追加するだけで
  システムを容易にスケールアップさせることができ、障害への耐性も強くなります。

Item機能

  Tairでは、FIFOに基づいて値を配列として利用することもサポートされます。
  例えば、キーの値が[1,2,3,4,5]なら、下記の3つ操作が提供しております。

  1. 値の一部[1,2]を返すこと
  2. [1,2,3,4,5]を丸ごとで削除すること
  3. 値の一部を削除し、削除されたデータを返すこと

Tairの構造

 Tairでは、Client, ConfigServerとDataServer3つの部分から構成されます。
 DataServerとConfigServer間のHeartBeatにより、データを平均分布してDB負荷を分散できます。
 Clientでは、初期化するときはConfigServerからデータ分布の情報を取得し、最短時間でリクエストを応答します。
 DataServerでは、指令によりデータの保存、移動などの処理を実行されます。



DataServerの構造





ダウンロード先

 下記のサイトでタオバオに関する多くの技術を公開されております。興味ある方にお役に立てれば幸いです。
 http://code.taobao.org/

まとめ

 NoSQLのデメリットはトランザクションがないことです。タオバオは非同期処理を追加し、高可用性のNoSQLを開発しました。
 今回では、タオバオ社の開発者のブログを参考して、Tairの拡張機能や仕組みを説明させて頂きました。
 コア部分の説明や具体的な動きにつきまして、情報不足で説明できなくて申し訳ありません。
 今後も調査し続けたいと思います。

参考サイト

 http://www.oschina.net/p/tair