ウェブオペレーション(非リレーショナルデータベース)

Facebook にシェア
このエントリーをはてなブックマークに追加
[`livedoor` not found]
Delicious にシェア

その時の気分で本を変えてしまってますが、ウェブオペレーション ―サイト運用管理の実践テクニック
15章 非リレーショナルデータベースを読んだメモを残します。
イマイチNoSQLが自分の中に落ち切っていないので、この章から確認しました。

SQLデータベースのスケーラビリティ
SQLデータベースのスケーラビリティは、4つにまとめめられる。

  1. キャッシュの最適化
  2.  読み取り負荷の軽減には非常に役立つ。
     但し、アプリケーションは複雑になり、軽減可能な負荷に限界がある。

  3. クエリの最適化
  4.  クエリの最適化も同様に限界がある

  5. 新しいハードウェアの購入
  6.  非常に効果的。問題は2つ。値段が高い。最も良いハードウェアを購入するとその後の手立てがなくなる。

  7. シャーディング
  8.  最後はシャーディング。シャーディングに適しているのは、ユーザID等から取得先のデータベースを
     振り分けるような場合(西海岸と東海岸とか)。だけど、ちょっと面倒。

どうすれば簡単にスケール出来るのか? どうすればデータを近くに保存出来るのか? どうすればアプリケーションを再構築しなくて済むか? といった悩みから生まれたのがNoSQLである。

NoSQLデータベースの概要
NoSQLは以下の5つに分類出来る

  1. キーバリュー型
  2. キーバリュー型は昔からある。memcachedで再注目された。
    非常にシンプルでキーを渡せばバリューが返る。

  3. データ構造型
  4. キーバリュー型とほとんど同じ。バリューをリスト・セット・ハッシュ等のデータ構造で格納する。
    リストだとpush, popが出来たりとアプリケーションのデータ構造と同様に操作出来る。
    Redis

  5. グラフ型
  6. データ構造型のデータ構造がグラフになっただけ。データはキーバリューではなく、
    ノードとエッジで格納される。

  7. ドキュメント指向型
  8. キーバリュー型に似ているが、バリューがドキュメントとなる。
    ドキュメントはJSONオブジェクトで格納されている。
    このタイプは、データ構造が事前に分からない場合に有用である。
    CouchDB
    MongoDB

  9. 高分散型
  10. 複数の形式があるが、共通しているのは複数ノードへのデプロイに最適化されている事。
    分散システムでキャパシティを増やすには、新しいノードをクラスタに追加すれば良い。
    1つのノードに障害があっても データが失われることなく、
    キャパシティが損なわれるだけである。一貫性を犠牲にして、可用性と分割耐性を保証するものが多い。
    なぜ、高分散型を使用するか?他に選択肢がないから。
    SQLベースのDBでは、大量のデータを扱えないが、高分散型では可能。
    但し、面倒。
    Cassandra
    HBase
    Riak

例で挙げた各データベースについては、後日調べる事とする。