中国最大のECサイト「タオバオ」のデータベース設計について
皆さん、明けましておめでとうございます。
chujiangleiです。今年も宜しくお願い致します。
昨年のことを振り返ると、2010年は「NoSQL」という言葉をネット上で注目されました。
データベースの主流はリレーショナルデータベース(RDB)ですが、GoogleやAmazonがRDBでない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,2]を返すこと
- [1,2,3,4,5]を丸ごとで削除すること
- 値の一部を削除し、削除されたデータを返すこと
Tairの構造
Tairでは、Client, ConfigServerとDataServer3つの部分から構成されます。
DataServerとConfigServer間のHeartBeatにより、データを平均分布してDB負荷を分散できます。
Clientでは、初期化するときはConfigServerからデータ分布の情報を取得し、最短時間でリクエストを応答します。
DataServerでは、指令によりデータの保存、移動などの処理を実行されます。
ダウンロード先
下記のサイトでタオバオに関する多くの技術を公開されております。興味ある方にお役に立てれば幸いです。
http://code.taobao.org/