個人的なNoSQL(KVS)のライセンス調査
[Sekka]をBSDLにしたいのと、将来どこかのSaaSでホスティングしたいという観点から、どのNoSQL DBを選べば良いか調査してみた。
ドライバはRubyのみを想定している。
また、SekkaはRuby 1.9.xでしか動かないので、1.9.x に対応したドライバが欲しい。
ちょっと偏ったコメントが混ざっているので、その点だけご注意下さい。
ポイントは、SekkaサーバにリンクするドライバのライセンスがGPL2 or GPL3以外のものであること。 ちなみに現在開発中のSekkaで使っているKyotoCabinetはRubyのクライアントライブラリがGPL3なのですでにNG。 KyotoCabinetの商用ライセンスを買えばOKになるが、目的は配布するSekkaをBSDLにすることなので、そのオプションは無しとする。 また、今後の運用のことを考えて、なるべくSaaS環境で利用できるDBを優先して選択したい。 そんなわけで、最近流行りにNoSQLサーバを順番に当たってみた。
memcached
永続化機能が無いので、Sekkaの辞書DBには利用できない。 しかし多くのDBがこのmemcachedの互換プロトコルをサポートしているので、クライアントだけ調査しておく。 ライセンス的にも修正BSDLなので問題ない。 もしかしたら、Sekkaがこの互換プロトコルの範囲で十分やっていけるのであれば、DBを選ばないこのライブラリがベストという可能性もある。
- クライアントライブラリ: gem install memcache-client でインストール可能。
- ライセンス: 修正BSDL (3条項)
- Ruby1.9.x対応: 〇
memcachedb
上記のmemcachdに永続化機能を追加したもの。
- memcachedの互換プロトコル: 〇
Kyoto Cabinet
現在も活発に開発が進んでいるDBである。 高速だし、Rubyから使いやすいので、ライセンスの問題が無ければこのDBを使い続けたかった。
- クライアントライブラリ: kyotocabinet-ruby-1.17.tar.gz
- ライセンス: × GPLv3
- Ruby1.9.x対応: 〇
- memcachedの互換プロトコル: ×
- 提供SaaSベンダ: なし
Tokyo Cabinet
開発はKyoto Cabinetに移行しているはずなので、今更使いたくない。 ライセンスはLGPLのためGPL感染せず問題ない。 memcachedのクライアントからアクセスするという方法もある。
- クライアントライブラリ: tokyocabinet-ruby-1.30.tar.gz
- ライセンス: 〇 LGPLv2.1
- Ruby1.9.x対応: ?
- memcachedの互換プロトコル: 〇
- 提供SaaSベンダ: EngineYard
mongoDB
Heroku上でmongoHQというadd-onsで利用可能なので、SaaS環境もOK。 少し、RDBMSに近い使いかたもできるので、将来的にも学習のしがいがある。 パフォーマンスがKyoto Cabinetoに比べて遜色無いかどうかは不明。
- クライアントライブラリ: gem install mongo でインストール可能。
- ライセンス: 〇 Apache License 2.0
- Ruby1.9.x対応: ?
- memcachedの互換プロトコル: ×
- 提供SaaSベンダ: mongoHQ(herokuのオプションとして使用可能)
couchDB
クライアントは、複数ある(RubyLibrary - Couchdb Wiki)ようだ。 あまり、高速ではないという噂があるので、Google Suggestのようなリアルタイム検索が主体のSekkaには向いていないと思う。
- クライアントライブラリ: 例えば、CouchObject であれあば
- ライセンス: 〇 MIT
- Ruby1.9.x対応: ?
- memcachedの互換プロトコル: ×
- 提供SaaSベンダ: Cloudant: CouchDB hosting(herokuのオプションとして使用可能)
Kumofs
特に、専用クライアントは無いようだ。memcahced互換プロトコルなので、memcachedクライアントを使う。
- memcachedの互換プロトコル: 〇
ROMA
まだまだ、楽天以外で使っているという声を聞いたことがないROMA。 まだ使うべきではない気がする。クライアントライセンスが何故 GPLv3 なのか。 楽天以外で使ってもらう気があるのであれば、ライセンスを変更したほうがいいと思うけど、そこまで言うのはおせっかいか。 但し、memcached互換プロトコルでアクセスできるらしいので、上記Kumofsと同じになる。
- クライアントライブラリ: gem install roma-client でインストール可能。
- ライセンス: × GPLv3
- Ruby1.9.x対応: ?
- memcachedの互換プロトコル: 〇
Cassandora
クライアントライブラリが、ThriftからAvroに移行していくらしいのだが、用途としてはちょっと大袈裟で合わない感じがする。 使う気は無いのでスルー。
redis - Project Hosting on Google Code
参考:永続化対応のインメモリDB「Redis」が登場 Kyoto CabinetよりももっとInMemory DBの要素を強くした感じのDB。 複数のサーバ間で、数分おきにDISKに書きこむなどの仕組みを持つ。 memcahced互換プロトコルではないので、どうかとも思ったが、EngineYardとherokuの両方がサポートしている。
- クライアントライブラリ: gem install redis でインストール可能。
- ライセンス: 〇 the very liberal BSD license
- Ruby1.9.x対応: 〇
- 提供SaaSベンダ: EngineYard、heroku
- memcachedの互換プロトコル: ×
Amazon SimpleDB - Wikipedia
Sekkaには向いていないかも。Amazonにロックインされるという問題もあり。 以下略。
Hypertable - Wikipedia
Bigtableの互換オープンソース製品。SekkaをJRuby+GAEで動かす予定ならこれもあり。 まだまだRubyでGAEを利用しようとすると、パフォーマンス面で苦労するそうなので、スルー。 以下略。
後、数日考えてみて、どうするか決めよう。 mongoDBかredis対応が優勢かな。それともmemcachedとredisの両方のクライアントで動くようにしておこうかな。