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

2006/03/09 - ごめんなさいね 救ってあげられなくて

目次

ごめんなさいね 救ってあげられなくて

サフィックスアレイ

とりあえず、簡単に組んでみた。

インデックス、デカッ。
2.7MBのデータに対して、インデックスが97MBって、ちょっとちょっと。
インデックス上でアルファベットの大文字小文字の統一、全角半角の統一、スペースを改行扱い、 検索語の先頭に来るとは思えない記号類の排除、等々やってみたら、34.6MBまでダイエット成功。

う〜む、さらにこれをソートしなきゃいけませんが、やるなら分割ソートかなぁ。
それでも、CGIで許容できる時間内に処理が終わるんだろうか。 サフィックスアレイを組む意義はあるのかなぁ。

全文検索エンジンとWiki検索機能の要件の差

実際にこうやって検索機能を作っていると、 通常の全文検索エンジンとWiki等の検索機能の要件の違いを感じます。
namazuやHyper Estraier等の全文検索エンジンは時間的な制約が緩いんですね。 それとオペレーションを分割する事が許されるのは大きいですね。 更新時には削除フラグを立てるだけで、 実際の消し込み作業は後でまとめてできるのは強いです。

PonyWikiでもcron使って同等の事は可能だったんですが、cron必須のWikiエンジンって嫌でしょ。

バックグラウンドで処理ができるのも強いですね。 CGIな環境だと、forkできるプロセス数や活動時間の制約があるので、裏で重い処理を流すのは怖いです。 プロセスをkillされてインデックスが壊れたら致命傷ですから。

意外だったのは、msearch的なアプローチの上限が思っていたよりも高い事ですね。 pure perlな条件で57000ページを数秒で検索するのはムリだと思っていました。
キャッシュも想像以上に有効で、快適さが格段に上がりました。 もっとも、よほどデータが多くない限りは体感しないでしょうけどね。

約57000ページあるテスト環境での処理時間 (メモ)

  • 環境
    • CPU Pentium M 1.6Ghz
    • Memory 512MB
    • Windows XP SP2
    • IIS
    • ページ数: 57349
  • 検索
    • 1.954 / 1.777 / 4.84 / 1.79 / 2.026 sec (キャッシュ無効)
    • 0.059 / 0.055 / 0.11 / 0.054 / 0.064 sec (キャッシュ有効)
  • ページ新規作成 (自動リンク有効)
    • 14.648 / 14.525 / 14.645 / 14.404 / 14.385 sec (キャッシュ無効)
    • 13.258 / 13.374 / 13.413 / 13.085 /14.024 sec (キャッシュ有効)
  • ページ更新 (自動リンク有効)
    • 3.152 / 3.041 / 3.039 / 3.089 / 3.112 sec
  • ページ削除 (自動アンリンク有効)
    • 31.789 / 32.1 / 32.897 / 31.499 / 34.053 sec (キャッシュ無効)
    • 33.262 / 32.449 / 32.4 / 31.399 / 32.299 sec (キャッシュ有効)

ページ削除にこんな時間がかかっている理由は、なんでだろう??
消し込み処理が理由かと思ったんですが、ループ回すのは3秒あれば十分なはず。処理内用は新規作成と変わらないのに、10秒近く何に使ってるんかな?

追記:
shiftが重いのね。その影響でメチャメチャ時間がかかる訳かぁ。テンポラリ配列を用意して、popとpushで削除するようにした方がいいんかなぁ。

自動リンクは重くて遅いというイメージがあったのですが、 このページ数でも3秒台で終わるんですね。やればできるんです。
プロレスラーは本当に強いんです 自動リンクは本当に速いんです。

これって

http://itpro.nikkeibp.co.jp/article/OPINION/20060308/232028/

この記事に出ているGoogle日本法人在籍の技術者って、あの人の事ですよね。
「目立ちたくないので名前は出さないでほしい」って理由で匿名みたいですが、 記事読んだら誰の事かすぐにバレるような気が……。

日本地図

なぜ人はテーブルタグで日本地図を作るのかからパクリ :-)

YukiWikiの記法だと、この辺が限界かな?

 
 
 
日本地図
青森
秋田岩手
山形宮城
沖縄石川富山新潟福島
島根鳥取福井群馬栃木
広島岡山兵庫京都滋賀埼玉茨城
佐賀福岡大分大阪奈良三重愛知山梨東京
長崎熊本愛媛香川和歌山静岡神奈川
鹿児島高知徳島

2006年03月の日記一覧へ

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

先頭へ