瓦拉莫語翻譯小弟比來在寫一個資料庫 翻譯搜索網頁,資料是文字檔 翻譯社前提是,資料檔可能隨時會更新,
而我沒有想要轉進去MySQL資料庫,感覺有點麻煩。
我嘗試了幾種搜尋的體式格局:
***方式1***
資料檔是近300Mb的TXT檔,BIG5編碼
把原始檔案拆成三十多個檔,用ajax要求php,php是用:
foreach(file($filename) as $fli=>$fl){
if(mb_stripos($fl 翻譯公司 $needle,0,"UTF-8")!==false){
//找到資料的處置懲罰...
}
}
這個方式搜尋一次費時約12-15秒閣下
***方式2***
先把資料檔案優化成TAB分欄位 翻譯文字檔,大小剩下一個42Mb 翻譯檔案
直接用SplFileObject()逐行比對環節字:
$file = new SplFileObject($filename);
while (!$file->eof()) {
$fl = $file->fgets();
if(mb_stripos($fl, $needle 翻譯公司0,"UTF-8")!==false){
//找到資料的處置...
}
}
這個方式搜索並沒有比較快,一次也費時約12-15秒左右
***方式3***
再把檔案每行先處置過,留下含有環節字部分看成索引檔,
然後再用方法2 翻譯體式格局搜索,得到行數再回傳此行數的原始檔那行資料,
原本想說搜索的文字檔小約剩下1/3,可以加速搜索速度,
結果出乎料想的,這方式並沒有快幾何,梗概只差1秒。
***方式4***
Google爬了一下文,有人保舉用shell_exec呼喚Linux內建的grep搜尋功能,公然用這方
式搜尋速度飛快,約0.3秒就搜索終了了。。-> 翻譯社|,-> 翻譯公司|的-> 翻譯
$strResult = shell_exec('grep -i "'.$needle.'" '.$filename);
$aResult = explode("
",$strResult);
foreach($aResult as $key => $value){
//找到資料的處理...
}
可是問題來了,
#問題1:除錯困難
當我測驗考試把這方法運用到其他資料檔的時辰,發現某些樞紐字明明有資料,利用方法1-3都
找獲得,但是利用方式4就是找不到,不知道該怎麼debug 翻譯社
並且搜尋關頭字用英文比較會有問題,中文就沒事。
#問題2:網站移植困難
假如要把網站移到非linux架 翻譯主機上,就沒有舉措用方式4了,不知道有無php內建的
搜索功能,效能可以比擬linux的grep的?
本篇文章引用自此: https://www.ptt.cc/bbs/PHP/M.1473353416.A.FCA.html有關翻譯的問題歡迎諮詢天成翻譯社
- Jan 28 Sun 2018 17:05
[請益]利用shell
文章標籤
全站熱搜
留言列表
發表留言