2010-10-30 35 views
3

我們都熟悉SO上的自動完成標記設置。大數據庫表和繁忙網站上Ajax自動完成查詢的高效方法

我想知道什麼是在這種情況下查詢標籤表最有效的方法。

許多用戶使用自動填充功能標記的繁忙網站需要大量查詢。假設任何時候有100個用戶輸入平均10個字符來查找/創建他們的標籤。這似乎是在單個表上的很多查詢,這只是一個繁忙網站的一個方面。

那麼,這只是一個確保在請求發生之前在客戶端有一個明智的延遲,或者它是否在數據表上進行智能索引,或者是否定期將數據卸載到一個更高效的服務器端查找存儲?

我會很感激任何提示。

使用mysql和php。

+0

不知道這是否是重複的,但我認爲這是SO的一個很大的問題;一個與許多新程序員有關的問題。 – BobbyShaftoe 2010-10-30 04:54:37

回答

3

將所有自動完成選項存儲在內存中。您可以使用Trie快速篩選選項(例如this Java implementation)。無論Trie有多少選項,它都會保持效率。

+2

+1;每當網站用戶在頁面上的一個框中鍵入一個字符時,我都會想到服務器上的數據庫連接發生抖動! – 2010-10-30 04:53:26

1

那麼,你不應該查詢。這應該被緩存。像這樣想想。假設SO上有28,000個標籤。假設每個標籤都是128字節(不是)。這只是3,584,000字節(基本上沒有)。有許多內存中的數據結構可以使其快速搜索這些數據。

+0

好的,將選項存儲在內存中是很有意義的。但我認爲這並不意味着常規數組,因爲每次發出請求時都需要從查詢中填充該數組。內存解決方案有哪些? – 2010-10-31 22:30:07

+0

我猜APC是因爲我可以使用它來緩存數據庫結果,它也會處理PHP腳本緩存。 – 2010-11-01 04:13:18

+0

APC也可以做用戶緩存 – 2010-11-08 01:56:16