Top > [[Web技術]]
NoSQL
2010年5月の技術レポートより抜粋して紹介します。
なお、弊社では 2012年後半から Cassandraプロフェッショナル・サポート を開始しています。
NoSQL 登場の背景
インターネットの利用方法として下記のような利用方法がますます増加しています。
- 動画や高画質な画像(写真)の取り扱い。(例:ブログ、SNS(交流サイト))
- 短時間に非常に多くのアクセスが集中し、大量のサーバーを並列稼動させて処理する。(BtoCサイト全般)
- データ項目が必要に応じて短期間で変化する。(例:アンケート)
これらのWebサイトのデータの取り扱いに、OracleやMySQLなどのようなRDB(リレーショナルデータベース)
が利用されてきましたが、下記の問題がありました。
- もともと数値や文字列の検索のために開発されたもののため、
動画などの大容量バイナリーデータの処理に特化していない。
- サーバーの一部がダウンした際にその後の処理の継続性が保証されない。
- あらかじめデータ項目とテーブル同士の関連性が定義されていることが前提になっているため、
頻繁な変更に耐え難い。
以上の問題点は、SQLを使ってデータを検索する前提のRDBでは解決が難しいため、
Not Only SQL (SQLだけではない)という発想で、新しい各種のデータベースが開発されています。
NoSQLという単語だけを見ると、今までのRDBやSQLを否定しているようにも見えますが、
決してそうではありません。
RDBおよびNoSQLそれぞれに得意分野がありますので、それぞれ適切に使い分けをすることが提唱されています。
次に、NoSQLの種類を見ていきます。
NoSQLデータベースの分類—1
NoSQLデータベースはデータを格納する方法で3種類に分類されます。
- Key/Value型
PHPの連想配列に似ています。電話帳の氏名と電話番号の対応のように、
一つのキーに対して、一つの値が登録されます。
一例としては、一つの日時に対して一つのメッセージが登録されると考えて、
エラーログの整理や、「お客様の声」への利用が考えられます。
- 列指向の表形式型
履歴書を例にすると、通常のRDBは、各応募者ごとに氏名、住所、電話番号、
最終学歴、特技などを管理しします。(行指向)
これに対して、住所、電話番号などを軸にして串刺しで処理するイメージです。
一例としては、サービス利用者を年齢や性別、職業単位で集計する用途が考えられます。
- ドキュメント指向型
単純な文字列ではなく、組織図のように、構造があるデータを取り扱います。
PHP言語レベルではXMLやJSONなどの取り扱いになります。
(RDBの中にはOracleやDB2のようにXML対応を行っているものもあります。)
以上のいずれにも共通する特徴として、データ型(スキーマ)が無いことがあげられます。
NoSQLデータベースの種類−2
また、下記の3項目を軸にして分類することもできます。
- C:一貫性
- A:可用性
- P:ネットワーク障害への耐性
上記の用語は、Eric Brewer氏により提唱されたCAP定理から取られたもので、
CAP定理では、分散処理システムにおいては、上記3要素のうち、同時に満た
せる要素は2つといわれています。
各種NoSQLがそれぞれどの2要素を重視するかを、可用性と一貫性を重視する
既存のRDBも加えて、整理しました。
(元の文章では図示ですが、ここでは文章で表現します)
- 可用性と一貫性を重視
- 各種 RDB
- Aster Data
- Greenplum, etc.
- 可用性と耐障害性を重視
- Dynamo
- Cassandra
- SimleDB, etc.
- 一貫性と耐障害性を重視
- BigTable
- MemcacheDB
- MongoDB, etc.
まとめ
実際に今後利用を検討していく場面では、上記3要素のうち、どの2要素を重視するか で絞込みを行い、
さらに どのようなデータを扱うか でデータ格納の種類を決めるとよいかと考えられます。
免責事項
なお、以上のブランド名やソフトウェア名は説明のために列挙したものです。
ご利用の判断は自己責任でお願いいたします。