RDBはスキーマ変更によるアプリへの影響が大きいこと、データが大規模になったときに分散させにくいことなどにより、RDBの制約がアプリケーションの改善をする上でのボトルネックになりがちです。
ということで、リレーショナルでないデータストアについて、少し調べてみたのでメモしておきます。
キーバリュー型データストア(KVS)
memcachedや、最近ではTokyo Tyrantが有名ですね。
memcachedはキャッシュ用途だけですが、Tokyo Tyrantは永続化もできるみたいです。
Tokyo TyrantをRailsから使い易くしたという、Miyazaki Resistanceもよさそう。食べログでも使っているそうです。
ドキュメント指向データベース
ApacheのプロジェクトになったCouchDBが有名。
最近ではMongoDBが、注目株らしいです。
UbuntuにCouchDBを入れて、ここを見て動かしてみましたが、なかなかよさそうな印象でした。
RDBの発想から頭を切替えなければいけませんが、CouchDBの名前のとおり、あまり構えずに気楽に使ってみたいと思います。
MySQLを非リレーショナルに使う
非常におもしろかったのがFriendFeedの事例。
CouchDBなどは安定性で不安があったため、勝手の知ったMySQLをスキーマレスで使うようにしたとのこと。
idとbodyしかないテーブルにJSONでデータを格納し、インデックス用に別テーブルを作るという大胆な発想。
WebアプリのDBスキーマレス化がRubyにぴったりな件
のSimpleResourceも同様のアプローチのようなのでメモ。
Solrを使えないか?
Apacheプロジェクトの検索エンジンでSolrというものがあります。Solrでは、検索対象のデータを非正規化してドキュメントとして格納します。
まさにドキュメント指向のデータストアです。さらに検索能力は右に出るものがないくらいの高性能。分散させる仕組みも持っています。
実際の運用ではしっかりとRDBが別にあった上で、そのデータを検索するために使われることが多いようですが(僕もそうやっています)、もう少しメインのデータストアとして簡単に使えたらいいのになと思っています。
問題はリアルタイムの頻繁なデータ更新に対応できないことなので、他のデータストアと組み合わせてうまくパッケージ化できないかなと。
Solrについては、つい先日1.4がリリースされたので、別エントリーで書こうと思います。
Bigtable、Simple DB
Googleで使われているBigtableや、Amazonのクラウドで提供されているSimple DBも非リレーショナルなデータベースだそうです。
Bigtableは無料で使えるGoogle App Engineでも利用できます。ちょうどGoogle App Engineを使いはじめたところなので、Bigtableも使うことになるはず。
このコメントはブログの管理者によって削除されました。
返信削除