作者 主題: 想問一下關於字串搜尋的速度  (閱讀 2758 次)

0 會員 與 1 訪客 正在閱讀本文。

oscars80

  • 憂鬱的高中生
  • ***
  • 文章數: 92
    • 檢視個人資料
想問一下關於字串搜尋的速度
« 於: 2006-01-23 18:30 »
目前碰到的問題:
一個目錄裡面有一千多個檔案,然後目前我要搜尋這個目錄當中的所有檔案中,
出現的關鍵字總共有幾次(關鍵字總共有五百多種)。

本來之前的作法是把關鍵字放入mysql當中,
然後每次fread檔案然後用for迴圈去比對,
可以這樣子一方面來說太操資料庫了,另一方面效率也慢。
(程序:先mysql select => 把關鍵字寫入array => for比對)

後來改用,將關鍵字全部dump出來,變成一個變數list,
每次使用前include檔案。
這樣子可以省去mysql select的時間跟效能,
但是每次都要include一次有點小累。
加上關鍵字改變的時候,去處理那個檔案會有點累人。

現在有個想法,就是把這些關鍵字放到shm當中,
只要是重開機或有變動的時候再去改變就好了,
然後從shm拉資料出來比對。有更動就是shm砍掉再重新load...

我的疑問是,第二種方法跟第三種方法的效率來說,會相差很多嗎?
因為來源的關鍵字會成長,以及比對的檔案數量也會增加,
所以相對的效率來說看能不能增快一點這樣子,
還是說第二種方式就是最佳解了,
或者是有更快的方式可以處理這種的字串搜尋... ? @@

ricky

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
想問一下關於字串搜尋的速度
« 回覆 #1 於: 2006-01-24 09:08 »
我的作法會像這樣
首先在資料庫裡面建立一個關鍵字的list table
接著再建立一個關鍵字統計表
把所有檔案裡面出現的關鍵字與list table關聯起來
table的內容記錄了
檔案路徑
關鍵字索引
關鍵字出現在檔案的位置
檔案最後修改的時間

接著寫個程式定期的去搜尋目錄找出最後修改時間與資料庫不同者(表示檔案有變動過)
重新建立檔案與關鍵字的對應
尋找關鍵字出現在哪幾個檔案
只需要搜尋關聯表格
把要查的關鍵字過濾出來就好了

php很適合快速開發程式
但他不適合管理巨大的資料(太慢了)
資料庫的長處在於具有強大的搜尋功能以及關聯能力
善用資料庫的能力才是提升效率的最佳方式
而不是拿資料庫來當巨大的儲存空間
處理資料就交給資料庫
php就專心作邏輯分析的動作吧
我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/

湯姆貓

  • 活潑的大學生
  • ***
  • 文章數: 475
    • 檢視個人資料
想問一下關於字串搜尋的速度
« 回覆 #2 於: 2006-01-24 12:32 »
嗯......ricky大厲害厲害....
讓小弟受教了.......
(原來還有這招....)

oscars80

  • 憂鬱的高中生
  • ***
  • 文章數: 92
    • 檢視個人資料
想問一下關於字串搜尋的速度
« 回覆 #3 於: 2006-01-24 13:43 »
目前來說,因為這是用於統計資料,
要搜尋的檔案只會統計一次,之後就不會在去做同樣的動作了。

所以這個關連性的部分,可能沒辦法建立就是了 >"<

其實如果用於重複搜尋的話,用time stamp的方式真的很好。

不過還是感謝大大的提供^^