簡體   English   中英

php解析速度優化

[英]php parsing speed optimization

我想根據數據庫中可用的元素添加工具提示或生成鏈接,例如,如果打印的html頁面是:

要以單用戶模式重啟linux主機,你可以......

我將使用explode(“”,$ row [page]),現在的想法是查找頁面中的每個單詞,以找出它們在此示例中是否具有相關的引用,比方說我有一個表引用一個用於重啟的條目和一個用於linux重啟的條目:重啟一個computeur linux:操作系統

現在我的輸出看起來像(用@替換<和>)

@a href =“ref / reboot”@ reboot @ / a @ your @a href =“ref / linux”@ linux @ / a @ host在單用戶模式下你可以......

  • 我保存內容時不會生成靜態列表,如果將來添加更多關鍵字,則文本將變得更具交互性。

我的主要關注點和問題是如何創建一個足夠有效的流程來完成它?

  • 我應該將所有數據庫條目存儲在一個數組中並進行比較嗎?
  • 為每個單詞做一個SQL查詢(看起來很瘋狂)
  • 將表轉儲到一個文件中並使用非常長的正則表達式或“grep -f模式數據”方式嗎?
  • 或者或者或者或者我確定它必須是一種更好的方式來做,只是不知道它,或者這可能太資源不友好而且我應該避免做這些事情。

干杯!

根據數據庫中關鍵字的數量,有兩種解決方案。 1.如果關鍵字的數量少於文本中的單詞數量。 然后,您只需從數據庫中提取所有關鍵字並進行比較即可。 2.如果關鍵字的數量多於文本中的單詞。 動態創建單個查詢,它將帶來所有必要的單詞。 例如。 SELECT * FROM keywords WHERE keyword ='system'OR keyword ='linux'等。

但是,如果您真的關心資源,我建議您創建一個緩存系統。 您處理每個頁面一次,然后將原始文本和結果存儲在數據庫中。 如果關鍵字表已更新,您可以再次重新處理所有頁面。

我會為每篇文章添加一個附加字段,其中包含用於處理本文的“關鍵字表格版本”。

每次用戶打開文章時,都應將此版本與關鍵字列表的版本進行比較。 如果它已過時,則處理該文章並將結果保存到articles表中。 否則你只需顯示文章。

您可以通過添加處理日期列來控制負載,並檢查它。 如果項目相對較新,則可能要推遲處理。 同樣,您可以比較版本差異,如果它大於5或10,例如,您應該更新文章。 如果您添加了重要的關鍵字,只需將關鍵字的版本增加10,您的所有文章都將被強制更新。

主要思想是將負載分配給用戶請求,並緩存結果。

如果您的系統負載很重,您可能希望使用隨機數生成器來定義您應該僅以10%的幾率更新文章。

您可以在某個地方靜態存儲關鍵字索引(數據庫,文件或數組)。 內容更新后,您可以相應地重建或更新索引。 您只需要確保可以快速查找它即可。

有了它后,您可以很快地查詢數據庫中是否有該單詞,因為索引已為此進行了優化。

我會將索引存儲在文件的排序列表中,然后使用二進制搜索進行查找。 這是一個簡單的解決方案,我認為如果沒有太多數據需要處理,這應該足夠快。 或者,您可以在一個SQL查詢中將文章中的單詞列表發送到數據庫,並讓它返回與列表中任何單詞匹配的文章列表。

同樣,在處理完文章之后,您還應該緩存數據,以便在對同一文章的后續請求中,可以給他們提供處理過的文章,而不是每次都進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM