Spatial インデックス貼れるKVMってことで、おー!と思ったんだが、ぶっちゃけどうしたらいいものか迷う結果に。

自分の作った非同期アプリの中で、AnyEvent::DBI風味(ブロッキングする可能性のあるDBアクセスを別プロセスにわけて順番にクエリを処理しつつ、プロセス間でデータのやりとりを行う)なアクセス方法で試したみたところ、主キーによるデータ取得はMySQLベースのものより30%ほど高速だったものの( 700+ qps -> 900+qps)、Spatialインデックスによる検索が30%ほど逆に落ちてしまった(540 qps -> 380 qps )。MongoDBのspatialインデックス貧弱だなぁと脊髄反射で思ったんだけど、よく考えるとMongoDBのPerlバインディングかもしれん。APIはオブジェクトっぽく洗練されてるんだけどムダが多すぎ。もっと速くできるだろ!この辺りはもう少し調査が必要。

あと、データが無くなる可能性が高い事も様々な文献でみてわかった。どのデータベースも結局のところハードディスクに確実に書き込まれるかなんて時と場合によってわからないんだけど、MongoDBの場合は「そこはちゃんと対応しようとするとパフォーマンスヒットがあるからとりあえずレプリケーションとスナップショットを取るようにして回避してよ」というポリシーがありきで、ディスクに書き込めたかどうかをなるたけ追求する、という事ではないらしい。まぁそれはポリシーの問題だから良しとしよう。しかしそれなら自分は「使い方としてはMemcachedと同じくらいに考えておけ」という事だと受け取った。つまり揮発性のあるデータストレージだということ。

そうなると話は全然変わってくる。MongoDBをプライマリストレージにするわけにはいかない。MySQL等でマスターデータを持っておいて、それを定期的にMongoDBにデプロイする形になるんだろうな。

レプリケーション設定は比較的簡単だと認識。

インストールも超絶簡単。起動も超絶簡単。

ふーむ。色々微妙だな。