2009-11-12 184 views
2

嗨,大家好,我需要您的意見。我處於需要使用ajax的情況,所以我需要每30秒查詢一次用戶信息.....哪個更有效率的查詢服務器(比如check首先是一個文本文件),如果有用戶信息的更新,則可以進行完整的數據庫查詢或直接每30秒直接查詢數據庫。請說明您的推理,以便我可以衡量我的決定...... 。提前致謝。服務器或數據庫

回答

0

取決於您擁有的用戶數量,但做一些輪詢將不可能擴展。

你應該看看comet體系結構。您應該編寫一些中間件,只在需要時纔會與數據庫進行交互,並在內存或平面文件中執行大部分操作。中間件會在你的前端(web服務器)和實際的後端(數據庫)之間進行一些緩存。

我建議你也查看memcachedb(或任何鍵/值DB engine)來編碼你的中間件。

如果你沒有太多的用戶可以保留一些輪詢方案。

4

我想在Web服務器上緩存,使用壽命爲30秒,並拉取所有用戶數據以減少往返數據庫的次數。我也有客戶端使用Web緩存,而不是去數據庫。

它是最小增益很大的開銷,否則

+0

+1 for Conditional GET – Piskvor 2009-11-12 09:15:05

4

如果您有少數用戶和少量的網絡客戶端,然後實現最簡單的解決辦法。

推理:除非您遇到嚴重的性能問題,否則不需要優化此類內容。我開始思考這個當:

  • 有成千上萬的用戶在DB
  • 此信息是查詢每秒數百個Web客戶端

,但如果你有10個用戶,那麼這可能意味着每10秒需要10個網頁瀏覽器詢問這些信息。你應該擔心你的服務器,因爲這將是無聊死了窮人CPU;)

+0

+1 for KISS ..... – 2009-11-12 09:29:46

1

我會措施第一如果簡單版本(好像查詢數據庫直接第一​​)不是足夠好。

然後,如果這樣做不夠好,尋找更好的解決方案(仍然是測量結果)。

有很多ifs取決於遠程給你很好的建議。

0

不知道我看到需要緩存,但也許我很天真? Cache如何知道數據是否已更改?

 
SELECT ... lots of columns 
FROM MyTable 
WHERE UserID = 1234 
     AND LastUpdated > @MyLastUpdated 

只有在AND爲真時纔會做任何認真的工作?如果返回零行,它沒有改變 - 或者UserID = 1234不再存在,但是如果你需要知道查詢可以改變也可以返回)。因此,我不認爲它有必要執行「自@MyLastUpdated以來更改過的用戶ID = 1234」查詢,然後是完整的SELECT *。

如果您在列列表中檢索LastUpdated的值,請存儲該值,然後在下次檢查UserID = 1234是否發生更改時將其作爲參數提供。

(LASTUPDATED是不是你最後一次檢查的時間,但該記錄的最後更新,很明顯,但它確實需要由相同的時鐘每一次創建的時間上課的SQL框本身(而不是客戶端的PC !!),並考慮到秋季夏令時發生的情況。)

相關問題