2009年11月17日火曜日

RDB以外のデータストアを調べてみた はてなブックマーク

最近、RDB(リレーショナルデータベース)以外のデータストアを使おうという流れが、ますます強くなっていると感じます。
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も使うことになるはず。

1 件のコメント:

  1. このコメントはブログの管理者によって削除されました。

    返信削除