表紙 | 新規 | 編集 | 編集 | 差分 | 一覧 | RSS | 検索 | 閲覧履歴 | 作成履歴 | 更新履歴

2006/02/10 - バカお前 死なないようにつけるから命ヅナって言うんだぞ

目次

バカお前 死なないようにつけるから命ヅナって言うんだぞ

業務連絡

テスト環境でPonyWikiの新しいバージョンを動作させています。 上手くいけば、今年最初のメジャーバージョンアップとなるのかな?って感じです。

なにもしていなかった訳じゃなく、マジメに検証して(遊んで)たんですよ。

今回の更新では↓なところを変えました。

  1. 検索用インデックスと自動リンク用インデックスの作成
  2. クイックソートをなるべく使用しない

インデックスには、あにゃきちさんのTie::FileArrayを使用しています。 ただし多少問題があるので、そのまま使い続けるかどうかは未定です。 少なくとも、検索用インデックスは構造を含めて置き換えます(もうちょっと先ですけど)。

で、何が問題かと言うと、index_mode => fastとするとデータが壊れます。

このオプションを指定するとTie::FileArrayのインデックスファイルを作成し速くなるんですよ。 実際試したら20〜30%速くなりました。 でも、どうもインデックスファイルの更新に問題があるようで、アレイの範囲を間違えてしまいデータが消えていくみたいです。 fastと指定しなければ問題ないので、まだ真剣に解析していないのですが、そんな感じ。
1万行のデータを100回程シャッフル→ソートしたら4000行に減りました。再現率は100%。

もう一つの問題が、ロックの種類を指定できない事でしょうか。常に排他ロックなんですよ。 これだとアクセス数が増えた時にスケールしなくなるので、ちょっと困りモノです。 今はコマメにtie && untieしています。 オプション指定できるように改造するつもりが、中身がややこしそうだったのでスルーしてます。
自動リンク用インデックスだけだったら、そんなに頻繁に呼ばれるものでもないので、見なかった振りで終わると思います。

検索機能

検索機能は将来的に全て取り替えるつもりです。

pnamazuを取り込もうかと思っている訳ですよ。 そうすると、wikiとファイルサーバやHNS等他のものの検索をまとめてできますし、取り込む事もできます。
検索に正規表現を使えるようになるのも美味しいですね。

最初はnamazuのmknmzから必要な機能だけ貰おうと思っていたんですけども、ちょろくも粉砕しました。あれは、ちょっと今からやるのはムリ。規模が大きすぎ。
pnamazuのtiny_mknmz.cgiなら何とかイケソウ。ページ数が増えたら、mknmzをcronで動かす等して対応できる(はず)と目論んでいます。

副作用としてEUCの範囲でしか検索ができない、ってのが痛いです。これは範囲外の文字に何らかのエンコードを施して対応するかも。
それに次のバージョンではnamazuもUTF-8化されるので、それに乗っかろうと考え中。

分かち書きの問題は、namazu dev MLの過去ログで面白いものを見つけたので、その手法で行こうと思ってます。

サヨナラ クイックソート

ウソです。1箇所残っています (^^;;

そろそろソート時のメモリ使用量が気になり始めました。800ページちょっとで、瞬間最大25〜30MB程使ったりします。 1プロセスなら問題なくても、複数アクセスがあるとサーバご迷惑がかかります。

ソート処理があるのは、以下の処理です。

  • ページ一覧表示
  • 自動リンク処理
  • 検索用インデックスの更新

検索用インデックスをページ一覧表示にも使うようにしました。これでソート処理自体をなくしています。
で、インデックスをソートする時には、挿入ソートで処理するようにしました。 これだけでメモリ使用量半分以下の5〜8MBになりましたよ。

挿入ソートは、整列済みのデータを扱う分にはクイックソートと遜色ない速度で働くので、 今回のケースにはよいかと思います。もっとも、ランダムなデータ相手だと泣きそうな速度なのが玉に瑕。
条件次第ではcomb sort11でもよかったんですけどね。

それと、更新すべき行を探すのに、これまでは手抜きで正規表現でやっていたんですが、 マジメにバイナリサーチで探すように変えました。
ページ数が増えてくるとこっちの方が有利です。メモリ的にもリーズナブルですよ。

それにしても、

  • ソート
  • サーチ
  • suffix array
  • N-Gram
  • 形態素解析

Wikiエンジン作ってるはずなのに、最近やってた事って検索エンジンの作り方ばかりです。
Pure Perlな検索エンジンモジュールってないもんですかねぇ < なかったよ

サーバーを増やせばいいんじゃない、サーバーを増やすだけで解決できるように努力するのだ

サーバの数増やせばアクセス数増えても平気なんじゃないの?、って意外と勘違いしている人が多くて、ちょっとビックリ。
スケーラビリティの確保って大変ですよ。

スタティックなコンテンツしかないのなら話は別ですが、どこかにボトルネックができればそこでスケールしなくなるんですからねぇ。

訃報

伊福部昭さんがなくなられたそうです。合掌。

ジャーナリスト宣言

http://www.sumire.sakura.ne.jp/~oguma/tron/btm20062.html#20060209-2

たぶん彼らはこう言いたかったんだと思います。

「ときに言葉は感情的で、残酷で、無力だ。それでも私たちは信じている、言葉のチカラを。ジャーナリスト宣言。朝日新聞」

それとも、朝日新聞だとデフォルトで感情的で残酷なモンなのかな? どっちにしろ、言葉が商売道具なのにあかんやろ、と思いますけどね。最近特に酷くなった気がする。

SQL いんじぇくしょん ではないよ

このエラーメッセージはあかんのとちゃうかな?

アンテナ経由で行ったら、こんなエラーメッセージが表示されてビックリですよ。

計算

4人居て、結婚すると8人になり、子供が2人として16人になり、 子供達が結婚すると32人になり、孫が2人として64人になり……。

結婚相手も皇族になる案が採用されていたら、 15世代ぐらいで国民の数よりも、皇族が多くなるのかな?

とりあえず流れてよかった。


2006年02月の日記一覧へ

''TrackBack'' - http://you-like.to/cgi-bin/ponytail/yukiwiki/wiki.cgi/2006%2f02%2f10

先頭へ