[ Perl ]
DiKicker の二次データの保存先を何にしようか思案中。 MLDBM::Sync が候補なのだが、MLDBM::Sync::SDBM_Fileだとデータが大きくなった時に速度が出ないようだ。
このサーバ(FreeBSD)のPerl(5.005_03)は、DB_File も GDBM_Fileも有効になかったので今までDBMパッケージの使用は避けてきたのだが、さすがに今回は使えないと辛いかも。
ということで Berkeley DB も含めて DB_File をホームにインストール。
tar zxvf db-4.2.52.tar.gz cd db-4.2.52/build_unix ../dist/configure --prefix=$HOME/local/db-4.2.52 make make install rm -rf $HOME/local/db-4.2.52/docs
インストール自体は特に依存するものも無く簡単。 ただし、このサーバでは丁度 busy だった事もあってビルドに2時間!もかかってしまった。 本来は暇そうな時にやるべきなのだろうけど、今日中にうまくいくか検証しておきたかったので、待った。
tar zxvf DB_File-1.808.tar.gz cd DB_File-1.808 export DB_FILE_LIB=$HOME/local/db-4.2.52/lib export DB_FILE_INCLUDE=$HOME/local/db-4.2.52/include perl Makefile.PL INSTALLDIRS=site \ LIB=$HOME/local/lib/perl \ INSTALLMAN1DIR=/tmp/man/man1 \ INSTALLMAN3DIR=/tmp/man/man3 make OTHERLDFLAGS="-Wl,-rpath -Wl,$HOME/local/db-4.2.52/lib" make test make install
libdb を実行時に検索させるのに LD_LIBRARY_PATH環境変数とか指定したくなかったので、-rpath を指定してしまった。 Makefile中の OTHERLDFLAGS 変数がリンク時に空だったので、ここで設定。
しかし libdb-4.2 でかいな。 Perl からの呼び出し一発目は結構時間がかかる。
DiKicker のキーワードインデックス用の転置ファイルの実装によさそげなモジュールはないかと CPAN をあたってみたところ、Search::InvertedIndex を発見。
Berkeley DB を複数束ねて大容量対応してあったりキャッシュが実装されていたりと高機能だが、それゆえ今回使うにはオーバースペックっぽい。 依存するモジュールもそれなりにあるし。
やっぱ、今回は自分で実装するかな。 しかし Search::InvertedIndex 自体は結構使えそうな感じなので機会があったら試してみたい。
キーワードインデックスファイル(Berkeley DB DB_HASH)の、レコード仕様を決めなおして修正。
自動リンクなどで語リストが必要な時に、今までは Term DB (Berkeley DB で実装)をスキャンしてリストアップしていた。 これだと語数が増えていくにつれ線形に遅くなるので、一度リストアップしたら Term DB の別レコードに Storable で freeze してキャッシュするようにしてみた。 ちょっと速くなることを期待。
あわせてロックまわりも改善。 DiKicker では Article DB と Term DB をセットでオープンすることとし、Article DB の方で排他制御をしている。 ただし、Term DB の方には排他ロックでオープンされているか、共有ロックでオープンされているのかの情報を伝えていなかったため、実は共有ロックの時にも書き込みをしてしまう部分が残っていた。
Term DB オープン時にどちらで開いているかを通知するようにし、キャッシュ情報などの書き込み時にはこれらを参照して間違えた書き込みをしないようにした。
2002年10月19日から開発を始めてしばらく公開・運用をしていた WikiEngine だけれど最近は WikiEngine そのものは使っていなくて、今はそのコードをベースに作った日記システム の DiKicker 部分しか使っていない。DiKicker の方は自分自身で今後も使っていくんだけれど、さすがにいろいろ古いのでそろそろ大改修しようかなと。基盤部分的には
などをして今後も使っていけるようにしたい。既に使っていないアプリケーションとしての WikiEngine 部分は移行させていく手間をかける必要はないと思うので、コードを削除していくことにした。WikiForum 立てるなら既にいろいろ他の選択肢があるしね。
CVS での管理もやめて Git 管理に変更。最後の公開 tarball を展開して git init して最初のコミットとし、その後に変更した作業ディレクトリを Git 側の作業ツリーに上乗せしていったんコミット。あらためて最後の公開コードの上に差分を積んでいくつもり。
この日記(nDiki)で使っている自作日記システム DiKicker、開発し始めたのが2003年12月末なのでもう13年物だったりします。ここ最近大きなメンテナンスはしていなかったのですが、まだこの先10年以上使えるように手を入れることにしました。一昨日から着手。
やりたいこと
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。