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

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

差分表示


&color(ffff00,ごめんなさいね 救ってあげられなくて)

* サフィックスアレイ
とりあえず、簡単に組んでみた。

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

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


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

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

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

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


* 約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 (キャッシュ有効)


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

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


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

* これって
http://itpro.nikkeibp.co.jp/article/OPINION/20060308/232028/

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

* 日本地図
&link(なぜ人はテーブルタグで日本地図を作るのか,http://d.hatena.ne.jp/wata300/20060308/p1)からパクリ :-)

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

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

----
[[2006年03月の日記]]一覧へ
-----
[[#rtrackback]]

先頭へ