脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

なぜRDBじゃなくてNOSQLを使うのか?

NOSQLとは

  • Not Only SQLの略
  • 昨今のweb業界などにおけるBigdataを扱う為に研究・開発された
  • 早い時期からビッグデータに直面して、対応技術を開発してきたのがAmazon(Dynamo)Google(Bigtable)であり、その後に開発された多くのNOSQLの見本となっている

Bigdataを扱う際に求められるもの・重要な点

3V

  • Volume(膨大な量): 一つのサーバ内に収まりきらないほどのデータ量
  • Velocity(速さ):リアルタイムに近い応答性能が求められる。(スーパーコンピュータなどの開発も進んでいるが、コスト面などの問題がまだまだある)
  • Variety(多種多様):様々なサービスが出てきたことにより、多種多様なデータ形式に対応することが求められる

他にも

  • コスト:高価なハードウェアではなく、安価な汎用ハードウェアで稼動する
  • 信頼性:データに紛失がなく、データは安全な状態に格納されている
  • 可用性:システム全体としてはいつでも使用できる状態にある
  • 耐障害性:障害が発生しても短時間で復旧できる
これらを満たすものとしてNOSQLが研究・開発されてきた

NOSQLの利点

Volume

  • 大量のデータを扱える
    • ラージオブジェク(ひとつひとつのファイルサイズが大きい)ではなく、個々のサイズが大きくても膨大に集まり、データの大きな塊になってしまう

Velocity

  • 処理を分散するため、一つ一つのサーバにかかる負荷が少なくなる
  • SQLはデータを格納する領域があらかじめ固定され、標準SQL規格で定義された数値や文字といった特定のデータ型に縛られる
  • 結果整合性を用いていることが多い
    • (完全排他制御では大量のデータをすばやく処理できない)

Variety

  • 複雑な構造に柔軟に対応できる(SQLのような構造化はしない)
  • データが多種多様(ログデータ、写真、文章、位置情報・・・・・)なので、相互の関係も複雑
  • バースト(突発的)アクセス増加が頻繁に起こり、データの量や質が激しく変化する
  • ドキュメント指向型やグラフ型といったSQLでは表現が難しいデータ構造をサポート
  • スキーマ定義を持たないため、データ構造を事前に定義する必要がない

低コスト

  • SQLなどでBigdataをさばくには高性能で高価なサーバが必要
  • NOSQLでは負荷を分散させるので、大量生産で安価に販売されているそこそこのサーバでBigdataを扱うことが出来る

導入の容易さ

  • SQLで対応するには都度でーたベース設計を行わなければいけないため、熟練したエンジニアが必要になるが、KVSではそれがない

Hi Scalability

じゃあなんでSQLを使っているのか

  • NOSQLが脚光を浴びてきたのはここ数年でRDBに比べると歴史が浅い
  • 単体のハードウェア上で利用するには最適
  • 機能が豊富
  • データ整合性(排他制御の仕組みがしっかりしている)
  • ナレッジやエンジニアが一番多い

結局どういう時にNOSQLを選択すればよいのか

  • 高い処理能力が欲しい
  • 必要に応じて水平拡張したい
  • 汎用的なハードウェアを利用したい
  • 多種多様なデータを扱わなければいけない
  • 高可用性と高信頼性が要求される