2008-12
13
22:30:00
RDBMSは消えないよ、超巨大システムの中を見る限りは


RDBMSの時代の終わりが見えてきた
多分に突飛で、恐らく業界全体の空気を読みすぎていると思うんだけど。ちょっと思い込みの方向に。
ということでついこの間まで世界的規模の巨大システムの中の人だった僕が通りすがりついでに事実関係を語りますよ。
といってもそのシステムでの事実に過ぎないけどね。


どこのWEBサービスでもそうなんだけどユーザーがある程度の規模を超えると真っ先にボトルネックになるのはI/Oですよね。
なのでユーザーデータやアプリケーションデータのクラスタ化なんかとともに行うのが、データのキャッシュ化です。
mixiさんやらはてながmemcachedを多用しているのもそうした理由から(一応想像)。
僕が携わっていたシステムではmemcachedではなくオリジナルのキャッシュシステムをわざわざ作って運用していたんですが、多分目的や使い方は他社とほぼ変わらないでしょう。ユーザーアクセス時にデータキャッシュがキャッシュサーバ内になければRDBへ直接アクセスしてユーザー側へ返答するついでにキャッシュしておきます。
データ形式はいわゆるNV(name-value)型で、KeyにはObject IDとかユーザー特定可能な値(ユーザーIDとか)を用い、Valueにはオブジェクトをそのままぶち込みます。アプリケーション特性により数十種類のオブジェクトが定義され、システム拡張に伴い次々に増えていくことになります。
なんでこういうことになるかと言えば、これは該当記事でも指摘しているけどRDBではアクセスが増えると急に遅くなる境界線があるから。
パフォーマンスを上げるためにデータをキャッシュに移すことになる。
つまり巨大パフォーマンスの前ではRDBMSは「ブートストラップDBMS」でしか無いのです。
これは一見記事作者の言及に追従しているように見えるかも知れない。
けれどだから言って、必ずしもこれをベストだとかこうしたいと思ってやっている「目的」ではないんですよね。文脈から分かると思うけど「やむなく」やっているに過ぎない。
確かにNV型のデータというのは今日日のWEBサービスには相性がいいところがあって、例えばユーザーごとのデータとかはユーザーIDと一意対応するし、XML/JSONといったデータはそもそもNV型とも言えるしで、キャッシュに移してWEBアプリケーションからも使いやすかったりもします。
(ここは所謂O/Rマッピングの現代性の問題があるんですが、この記事では触れません)
但し、繰り返しますがこれは物事の本質ではありません。
本当はRDBのまま(=SQLが使えるなら、というニュアンスも含みます)で済むならその方がいいと思っているんです。
そもそもRDBMSが無いなら「ブートストラップDBMS」はどうするのか。ブートストラップ自体もNV型のファイルシステム?だかになるなら、どれだけアプリケーションを組むのが面倒になるか。パフォーマンス優先と言えど、このブートストラップを何に代替させるのか。
たとえそのためだけとしても、RDBMSは選択され続けると思いますよ。
また巨大システムと言っても、別に全部のシステムにキャッシュが必要とも限りません。本当にキャッシュが必要なシステムって、恐らく全体の10-20%ぐらいです。それらが全体の80%のリソースを食い尽くすって感じじゃないでしょうか(あ、80-20の法則ですね)。
そのために全部のシステムでエンジニアに苦労を強いるのは現実的ではありません。
これは個人的意見ですが、WEBサービスで扱うデータってのは特徴的で、静的状態で求められるものとライブ時にアプリケーションで扱いたいものとは性質が異なると思うんです。
ライブ時には先に書いたように、NV型というのが扱いには便利なようです。逆に静的状態ではオーソドックスに正規化されていないとメンテナンスも大変だし、ある程度正規化されるとアプリケーションごとに扱うデータが入れ組むのでエンジニアの混乱も間違いが無いように取り除かないといけません。
といったことを考えると、他の記事でも指摘されてたけど併用というか、ハイブリッドなデータ環境でしばらくは模索する、というのが現実なのではないかな。
後ついでに、JOINはよく使うと思いますよ。ユーザーリレーションが重要なシステムになればなるほど。
まとめると、
– RDBMSのパフォーマンス悪化にはみんな困ってるよ
– でも取り扱いは便利だし、無いのは考えられないよ
– キャッシュシステム並みのパフォーマンスのRDBMS(と言うかSQLが使えるDBMSかも知れないけど)が出てきたら飛びつくよ。でも無いよね。。
– しょうがないから当面はNV型のキャッシュシステムも併用するよ、これも意外に便利だし
て感じですね。
# 一方でAmazonにせよGoogleにせよ、データストアとしてNV型のみ提供しているというのは、WEBサービスに特化すればNV型が相応しいと考えているのか、あるいはパフォーマンスに問題が出ると嫌だからRDB型は提供しないと考えているのか、どっちでしょうね。
どういう思想を持っているのか興味深いです。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください