2013-01-06 39 views
1

需要一些建議....PHP/AJAx Live Search的最佳方法 - xml或MySQL?

我見過很多關於執行AJAX實時搜索的不同方法的討論,其中使用自動完成功能來建議搜索條件。就像在Google或YouTube上一樣。

一些教程建議使用AJAX從XML文件中獲取結果。有些人建議直接查詢數據庫。在採取哪種方法方面似乎存在很多相互矛盾的建議 - 但對每個方案的利弊沒有明確的共識。

可以說我有結構的表:

ID TITLE AUTHOR LINK 

我想有自動填充提供了標題建議的搜索框。桌子很大 - 有100000多排。

什麼是最好的辦法:

  1. 查詢DB直接在每次擊鍵(可能建立一個函數每秒限制每個用戶#服務器請求)。

  2. 查詢XML文件。這是否更有效率?如果我直接查詢數據庫,我是否有可能超載服務器?

  3. 還有其他的東西嗎?

有人可以總結一些需要考慮的事情嗎?如果您在您的網站上進行了AJAX實時搜索,您採取了哪些方法?

+0

我可能會使用獅身人面像,因爲它真的很快。 –

+1

查詢正確索引的數據庫有多快?答:非常快。它能夠以多快的速度讀取整個XML文件並手動搜索您要查找的內容?每一次,一次又一次地閱讀整個文件?答:不是很。 – deceze

回答

1

首先,100,000+行是一個小型數據庫。今天的計算機速度很快,它們有大量的RAM,它們有快速的總線。但是,即使不是所有這些,正確的索引數據庫也會使用類似binary search tree或更高級的變體,以確保搜索以O(log N)或更快的速度進行。對於100,000行數據庫,這意味着最多可以找到所需的元素,最多可以進行17次比較。頂起這10,000,000行只需要23比較。所以,在這個意義上,大小不是問題。

你打算如何閱讀該XML文件?數據庫是精心設計的軟件,通常經過多年的測試,調試和優化。而且,如果您對數據庫不滿意,通常可以通過擴展或修改來提高數據庫的效率。例如,Facebook每秒鐘需要約6000萬個查詢,而他們是running on MySQL

相比之下,您的XML文件在開始時沒有索引,因此每次讀取時都需要線性搜索(在O(N)時間內)。文件I/O相對較慢,線性搜索速度較慢。

您的數據庫也被設計爲一次接受來自許多用戶的匹配而不會抱怨。您的操作系統可能會或可能不會被設計爲處理許多用戶同時訪問同一文件。

XML選項可能更好的情況是,如果您的數據庫位於不同的服務器上並且存在顯着的滯後時間。在這種情況下,您可以考慮使用SQLite或嘗試優化與數據庫的連接。