Monday, September 22, 2008

Packages|Sourcesのインデックス

Hackathonの続き。 SQLで毎回既にあるかどうかチェックするのが遅かったようなので、最初に既存の情報をロードして、python の dictおよびsetでチェックするようにしたらだいぶ速くなった。 最初、dictをdictのkeyに使おうとしたら使えなかったので、dictをstrにしたのをkeyにしていたら、入力のパスによって stringになっている時 (e.g. 'foo')と、unicodeになっている時(e.g. u'foo')があって全然keyとしての役目をはたしてなかったりするようなしょぼいバグがあったり。 初期状態からのロードは、大きいPackages.gzとかだとやはり10分とかかかるけど、更新ならせいぜい1〜2分になっているようだ。一日分もだいたい20-30分くらいにおさまるようになった。これならなんとかなるかな。今のところざっと1日で4〜5ヶ月分処理できているペースなので2週間ほどで全部 index できそう。 indexのdbファイルも2ヶ月分くらいつっこんで 120MB程度。300-400MBくらいになるかな。appengine使う時は ModelのEntityになるからもっと容量が必要になりそうだなあ。 あとはCGIかservletとして動かすようにしないと。