「MongoDB」カテゴリーアーカイブ

NoSQLのアレコレ

couchdb
1.00
mongodb
1.30
neo4j
0.10

次のプロジェクトで使うデータベースを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かなぁ。