2012-01-29 55 views
1

我正在製作一個網站(基本上)讓用戶提交一個單詞,將它與MySQL數據庫進行匹配,並返回找到的最接近的匹配。我目前的實現是,每當用戶提交一個單詞時,就會調用PHP腳本,它讀取數據庫信息,逐個掃描每個單詞,直到找到匹配項並將其返回。服務器運行時,有沒有一種方法可以在PHP中保存數據庫數據?

我覺得這樣效率很低。我即將製作一個程序,將單詞列表存儲在樹狀結構中以進行更有效的搜索。如果數據庫中有成千上萬個單詞,我可以看到當前的實現速度有所下降。

我的問題是這樣的:而不必編寫另一個單獨的程序,並使用PHP連接到每個查詢,我可以保存整個數據樹在內存中只用PHP?這樣,任何會話中,任何查詢都會從內存中讀取,而不是重新讀取數據庫並反覆重建樹。

+1

可能想看看http://memcached.org/ – cspray 2012-01-29 05:27:09

回答

4

我會研究在你的服務器上運行memcached的一個實例。 http://www.memcached.org

您應該能夠將編譯過的數據樹存儲在內存中,並檢索它以便在PHP中使用。但是,您必須將其加載到PHP中才能執行搜索,同時還要爲架構師設計一種在數據庫更改時更新memcached中的樹的方法(假設可以更新單詞列表,因爲沒有很好的理由否則將其存儲在數據庫中)。

+0

謝謝。我看着圖書館,似乎比我從零開始編寫整個程序的原始想法更容易得多。 – Sefu 2012-01-29 06:31:14

0

對於大型內存結構,PHP確實不是一種好語言。正如你所詢問的那樣,它不是非常有效的內存,並且存在持久性問題。通常在PHP中,人們會將數據存儲在爲快速檢索而優化的外部永久性數據存儲中。

通常人們使用兩倍的辦法:在數據庫

1)存儲數據,儘可能爲標準查詢

優化

2)昂貴的查詢緩存結果的memcached

如果你是處理很多無法被關係數據庫索引的數據,那麼您可能需要推出自己的守護進程(例如用C語言編寫),以便在內存中保存持久的數據結構副本以便快速查詢功能。