浅葱さんのブログ

ええ、以前はぷらしのすとか言っていましたよ

INN に学ぶ(続)

承前。1週間も寝てしまって内向きの仕事に追われていたが、書こうと思ったこと。

INN でおもしろいと思ったのは、記事に内部的にひとつづつ token という id が振られていて、 記事を読もうとしたときは message-id から一度(grephistory(1)などにより) token (uuid くらいの数字列)を得て、 そこから (sm(1) などにより) 記事を取得するのである。

正直あまり細かくみたわけではないが、こうすることにより、記事本体の物理的保存形態(4つくらいから選べるようになっている)から記事の管理(配送とか、ニュースグループ分けとか、いろいろ)を独立させることができるようになる。

というわけで、どうせストリーム的なアクセスが多いなら、データファイルはシーケンシャル(INN の timecaf とか cnfs みたいなもの)にしておいて、それを扱うロジックからは抽象的なトークンだけを扱うようにするのがいいな、と思った。ファイル某の何バイト目から何バイト、とかいうのを生で書くとろくなことがない。

で、エキスパイヤする場合ちょっと迷いがある。たぶん、timecaf みたく時系列でファイルを集めて古いファイルから順に捨てていくのだが、そのとき大量のトークンが失効するわけだ。で、上位ロジックの DB でそのトークンを参照しているレコードは消していかないと、検索結果が実は参照不能とかなったりする。まあ数%くらいは許されるだろうけど、どんどん増えたらまずいから、エキスパイヤというイベントを契機にして上位DBの削除をトリガしなければならない。そのトークンリストはどこから得るんだろう? と、文字にしないで考えていて悩んでいたが、トークンと実体の対応は下位 DB に書くので、そこで SELECT (または DELETE) FROM token WHERE file = 'jan20.dat'; てな感じでやっつけてしまえばよい。

やっぱり書いてみるものだ。

スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://prasinos.blog2.fc2.com/tb.php/733-1b494d78
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad