一昨日の続きで、ひとまずtdiary-hyperestraierを公開しました。
Hyper Estraierのドキュメントに書いてあるように、CGIから直接データベースを更新するのは、プロセスがKILLされた時にデータベースが壊れる危険性があるし、更新時にはロックがかかって検索できなくなりますので、前から試してみたかったP2P機構を使うようにしました。
最初、私の日記だけのノードサーバを作ってうまくいったので、第二の全日記(64個)を一気に登録しようとすると、途中からエラーになりました。 たぶん、ファイルディスクリプタが枯渇してしまって、ノードマスタがおかしなことになったようです。 そこでもう一度ドキュメントを読んでみると、疑似ノードマスタなるものがあったので、(第二では)それを使うようにしました。 このあたりの切り替えは、接続先のURIの違いだけの話ですので、簡単にカスタマイズできるようにしてあります。
今のところCVSのTest_UTF8ブランチのcontrib/util/estraier-search/だけでのリリースというハードルの高さですが、これを機にTest_UTF8ブランチへどうぞ〜。
以上、私からのバレンタインということで♪
疑似ノードマスタでの接続は、疑似ノードマスタのCGIを毎回起動する分、余計な負荷があるんじゃないかという気もしたので、全日記を一つのノードサーバに登録するようにした上で、再び通常のノードマスタを使うように変更してみました。
というわけで、また全ての日記のインデックスを一から作成しています。 出だしは「おぉ〜!」と言うくらい速かったのですが、やはりだんだんゆっくりになってきました。
全てのインデックスを更新した状態で、どれくらいのパフォーマンスになるのかを確認してみますが、できれば通常のノードマスタでの運用でいけたらいいなと思っています。
[追記] 朝起きてもインデックスの作成が終わっていなくて、その原因は「登録済みの同じ日の日記を検索(して削除)」するのに時間がかかっているからだったので、再びドキュメントを読んだところ、属性インデックスを作成すれば速くなるというのがわかりました。 というわけで、ノードマスタを作りなおして、_confに
attrindex: @uri{{!}}str
を追加してまた一から作成しなおしたところ、今度は2時間くらい?で終わりました。 ドキュメントに追記しておきます。
素早い!いい感じですねー。
> okujiさん<br>想像もしていなかったきっかけですが、前からHyper Estraierは試してみたかったので、いい機会でした。<br>Rastもそうですが、CレベルでAPIが綺麗に整理されていて、それがそのままスクリプト言語で呼べるようになっているライブラリは使いやすいですね。
これも一時的なものなのかも知れませんが、脚注を使っているとInternal Server Errorになっているようです。<br><br>Insecure: can't modify array (SecurityError)<br><br>(plugin/footnote.rb):31:in `<<'<br>/home/tdiary/tdiary/core/tdiary.rb:94:in `join'<br>/home/tdiary/tdiary/core/tdiary.rb:94:in `safe'<br>/home/tdiary/tdiary/core/tdiary.rb:732:in `eval_src'<br>/home/tdiary/tdiary/core/tdiary.rb:1083:in `do_eval_rhtml'<br>/home/tdiary/tdiary/core/tdiary.rb:1020:in `eval_rhtml'<br>/home/tdiary/tdiary/core/index.rb:74<br>/home/tdiary/users/tab/index.fcgi:16:in `load'<br>/home/tdiary/users/tab/index.fcgi:16<br>/home/tdiary/users/tab/index.fcgi:15:in `chdir'<br>/home/tdiary/users/tab/index.fcgi:15<br>/usr/lib/ruby/1.8/fcgi.rb:612:in `each_cgi'<br>/usr/lib/ruby/1.8/fcgi.rb:609:in `each'<br>/usr/lib/ruby/1.8/fcgi.rb:609:in `each_cgi'<br>/home/tdiary/users/tab/index.fcgi:3
> snakさん<br>ご報告ありがとうございます。修正しました。