■ NoSQL
* リレーショナルDB以外のデータベースソフトの総称 * 機能を絞りスピード重視(SQLに比べて機能が少ない) * 短所もあるので、データのもつ特性によって、 リレーショナルDBと使い分けることが必要(詳細は「リレーショナルDBとの使い分け」を参照のこと)
特性
長所
* 大量データを高速で処理可能
短所
* データの一貫性を保障する仕組みがない * 必要なデータを指定して取り出すといった機能はない
■ NoSQLの種類
http://thinkit.co.jp/story/2011/02/03/1990?page=0%2C1
の図でイメージし易いかも。
【1】 キーバリュー型(KVS)
【特徴】
* 一つのID(キー)に対し、いくつかの値(バリュー)を格納するだけの作り * 大量データの読み書きが高速で扱える
製品例
* memcached * TokyoTyrant * Flare * ROMA * Redis * Riak
【2】 列志向型(カラムナ)
* 従来のDBの場合は、行指向でデータ処理するのに対して、列指向でデータを処理する。
【特徴】
* 列方向のデータ操作に向く構造を持つ * 非定型データに強い
【利点】
* 大量データを扱う時に、データ全体像を理解するために(例えば、購買する年齢層・地域など)、 項目(列)ごとで扱う際に利用する場合に処理速度が速い
製品例
* HBase * Cassandra * HANA by SAP * Netezza by IBM * Exadata by Oracle
【3】 ドキュメント指向型
【特徴】
* データ集計に強い
製品例
* CouchDB * MongoDB * RavenDB
【4】 グラフ指向型
【特徴】
* 多対多で複雑に関連付けられたデータを扱うのに特化
製品例
* Neo4j * Sones
■ リレーショナルDBとの使い分け
NoSQL
* 一貫性:不要 * 結合:不要
【例】
* ショッピングカートの内容(ユーザごとに分かれているので一貫性を保つ必要がない)
参照用DB
* 一貫性:不要 * 結合:必要
【例】
* ユーザ管理 * 購入履歴
更新用DB
* 複数のユーザが同時に更新を掛ける場合 * 一貫性:不要 * 結合:必要
【例】
* 購入商品(商品の在庫の一貫性を保つ必要がある)
■ パフォーマンス比較
* 別サイトの比較試験(参考までに見てみるのはいいかも) * サイトによってまちまち
Cassandra / Mongodb / SQLite / H2 / MySQL / Postgres
* SQLite が高速!!?
http://d.hatena.ne.jp/cypher256/20121013/p1
memcached / Couchbase / MongoDB / Redis
http://mocobeta-backup.tumblr.com/post/36435137765/kvs-memcached-couchbase-mongodb-redis
MySQL / memcached / TokyoTyrant / MongoDB / VoltDB
http://wall-climb.com/2012/03/28/nosql%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E6%AF%94%E8%BC%83/
MySQL(MyISAM, InnoDB) / memcached / TokyoTyrant / MongoDB / HBase
http://gihyo.jp/dev/serial/01/various-nosql/0006
MySQL(MyISAM, InnoDB) / memcached / TokyoTyrant / MongoDB / Redis
http://yosuke-furukawa.hatenablog.com/entry/20110821/1313886186
MySQL(MyISAM, InnoDB) / MongoDB
http://d.hatena.ne.jp/hiroppon/20131126/1385477732
SQLiteとRedisでランキング(ソート)の速度
http://mocobeta-backup.tumblr.com/post/55339134454/sqlite-redis