ひさしぶりにHikiをいじりました。
現状のHikiは、ページ本文を直接ファイルで保存して、ページの属性は別のファイルに保存して、ページの履歴はオプショナルでCVSとかSubversionで管理、という感じなのですが、まるごとMySQLで管理することにしました。
いざそういう方針で実装してみると、本文、属性、履歴がそれぞれ別の管理方法になっていたのに比べると、とてもすっきり。 ページの最新版と履歴とは、別テーブルにせずに同一テーブルにリビジョン付きで保存して最新を取ってくる、みたいにしたのですが、一見シンプルに見えて、SQLのクエリーがけっこうややこしいことになるので、パフォーマンスのためにも、これは分離したほうがよさそうです。
でもまあ、だいたい動くようになったので、fdiary.net wikifarm(の自分のところ)に試験的に実戦投入してみると、いろいろ問題が続出しました。
最後の問題は、データ保存のバックエンドを切り替える際に、別のファイルに同一クラス名で定義してそれをrequireしているので、最初にrequireされた際のクラス定義がその後ずっと使いまわされる、という問題でした。 今回の問題は別としてもあまり気持ちよくないので、ここはあとで修正します。
さて、バックエンドをMySQLにして何がうれしいかというと、例えばSPAMをまとめて消すときに便利とか、障害対策がMySQLのノウハウで楽にできるとかでしょうか。 設定ファイルとか添付ファイルとかは、依然として直接ファイルに保存しているので、いきなり何も考えずにアプリケーションサーバを増やして負荷分散とかは無理だけど、そういうことも今後できなくはないでしょう。
ただ、個人的には完全にanonymousなwikiは管理コストの点でもう無理だと思っていて、SNSみたいなゆるい認証の上で「仲間内で使う」ような利用を目指してシフトしていく方がいいんじゃないかな、と感じています。
思えばそんなことを考えてRubyist SNSを作ろうとしたんだよなぁ、と遠い目になりながら、そういう自由ソフトウェアの開発をがしがしリードする勇者の出現をひそかに待っております。