NoSQLのアレコレ
|
次のプロジェクトで使うデータベースをNoSQLにしてみようと画策中なので調べてみた。NoSQLには大きく分けて以下の4つがあるようだ。
・キーバリューストア(KVS)
・列指向データベース
・ドキュメント指向データベース
・グラフ指向データベース
下の3つは、新しくないし商業的にNoSQLと(言うと売れるので)叫んでるっぽいので無視。
・オブジェクト指向データベース
・XMLデータベース
・グリッドデータベース
KVSと列指向は十分使ってきたので、グラフ指向データベースとドキュメント指向データベースに興味があります。
MongoDB(ドキュメント指向データベース)
Googleトレンドを見るかぎり、ドキュメント指向データベースではApache CouchDBよりも人気があるようなので、MongoDBを調べてみた。(注:グラフ指向データベースは商業製品が多い)
・1オブジェクトの最大サイズは4MB
・オブジェクトにリレーション情報を含める場合、容量の関係から必然的に上限数の設定が必要になってくる。
・パフォーマンス的には、メインのオブジェクトに含めるのが良いが、上記の理由で大量のリレーションを扱うには分離する必要がある
・スケールアウトに必要なプログラムはデフォルトで用意されている
・ハッシュに偏りがある?
・id_以外への検索が遅い。id_以外へのアクセスは、SQLで言うところのLIKEに相当。インデックスは必須
・Shardingが簡単
・ライセンスがビジネスに使いやすい
・DBプログラム本体はAGPLだが、DBにアクセスするドライバーで分離していると本家が主張
・Javaドライバーにバグがある
・コネクションがリークする場合がある
・スレッドが2つ生成される
neo4j(グラフ指向データベース)
Googleトレンドで調べるとグラフ指向データベースではNeo4j以外がランクされないので、これ1択という理解でいる。
・2003年より24時間動作可能な製品となっている
・2000ノードぐらいのグラフでも、MySQLよりも1000倍高速
・データが多くなると、この差はさらに大きくなる
・リレーションへのアクセスが簡単
・友達の友達とかを一発検索!
・基本構成でスケールアウトできない
・ビジネスパッケージではスケールアウト機構が提供されている
・ビジネスパッケージは、AGPLで利用可能なので、オープンソースにするのであれば問題ない。
・有償でクローズド利用可能なライセンスが付与される。ただし、金額は非公開なので怖い
個人的に気になっているのが、
・スケールアウト時の挿入・検索パフォーマンス
・MongoDBで挿入パフォーマンスの劣化があるらしい?
・スケールアウト時にボトルネックが発生しないのか
・neo4jのコスト(ビジネス向けなので高いらしい)
ううむ。やっぱりMongoDBかなぁ。


