TokyoCabinetテーブルデータベース

http://alpha.mixi.co.jp/blog/?cat=11&paged=2

HASH-WRITE	41.766	61.560	361,947,424
HASH-READ	12.473	12.511	361,947,424
HASH-RANDOM	124.149	1525.510	365,624,992

1千万件の時のランダムアクセスがSSDだとHDDより10倍以上速い
(1億データだと20倍ぐらい差が出ている)

	TCTDB	TCHDB
put	102.04 (9800qps)	41.12 (24319qps)
get	50.97 (19619qps)	41.01 (24384qps)
search	53.80 (18587qps)	-

TokyoCabinetにはテーブルモードがありますが、
GETだとほとんど遅くならないですね。PUTは2倍ぐらい遅くなりますが、
問題なさそう。
現在、SNSアプリではハッシュモードのみを使っていて、
テーブルモードは使ったことがないんですが、今後はテーブルモードを使おうかと思います。
バッチなんかで全ユーザーのデータを集計するためにmysqlを併用しているんですが、
テーブルモードを使えば、MySQL無しで運用できそうですし。


ただ、全国ランキングをする場合は、全ユーザーのデータをperlのリストに保持してから
sortすることになるのかな?
会員が多い場合は時間がかかりそう(^^;
MySQLの場合は、SQLでORDER BYでソートした結果がすぐ取れますし
(それはインデックスをMySQLがバックグラウンドで予め作ってるからですけどね)
ただ、100万件ソートとかになると、
C言語は1秒かからなくてもperlだと10秒ぐらいかかるだろうね


ソートに関しては検索条件を工夫すればできる模様

プライマリーキーはフィールド指定して検索・ソートできる
http://blog.myrss.jp/archives/2010/04/tokyo_tyrant_to.html


あと、実は、全文検索もTCでできるようなので、
テーブルモードを使えば、mysqlなしで2chradioが実現できそう。
CPU負荷的な問題も解消して爆速になると思う。
あと静的HTMLをわざわざつくらないのでもCGIだけで動きそうだし、
頻繁にクローラーを回して、頻繁に記事をインサートしても
問題なく動きそうだし、
うーん、TCのテーブルモードで移植してみようかな?