1

什麼是正確的方式來做用戶活動日誌,如Facebook如何做,並且真的很快。我有一個客戶的網站,它有活動記錄用戶的活動並顯示給他/她的朋友/家人/追隨者,但速度很慢,我們願意對數據庫進行更改,如果它有助於提高用戶交互性並做日誌正確的方式。我確定很多人已經在研究它,但我無法找到它的任何鏈接,它顯示了它如何完成正確的方式,所以我也可以實現。任何幫助?正確完成用戶活動的數據庫結構?

期望的活動輸出

enter image description here

+0

目前的結構是什麼?知道這將有助於人們提出改進方法。什麼樣的機器硬件,多少用戶,當前響應時間,期望的響應時間等。否則,問題就會變得模糊。 – dmcnelis 2011-02-02 22:25:20

+0

好吧,我想知道什麼是這個東西最好的表結構,真的很簡單的方法來說是Facebook。每個人都知道Facebook上的活動是如何工作的,只是想知道我應該使用哪種表結構來設置它們。 – Basit 2011-02-02 22:52:43

回答

1

那麼,Facebook的架構具有高度可擴展的,他們有很多的「前門」對數據的請求,以及背後,一些真正的肌肉緊縮數據有效。

第一個問題是,這個應用程序應該處理多少個併發用戶? 100,只要確保你的數據層索引良好,並且你正在做「聰明」的查詢(使用索引標準準確地獲得你需要顯示一個頁面的數據,不多不少)。如果查詢返回的數據很多,請在查詢中將其分塊(SELECT TOP 25 ... FROM Activity WHERE Activity.Date < <date of the last record of the last page you retrieved>)數以百計,請考慮使用複製服務器來分隔非實時或不常使用的任務,或簡單地實現負載平衡。高達數百人,開始思考具有分佈式表和批量交易運輸的服務器集羣。除此之外,您超出了我在企業架構方面的專業知識。

你在任何情況下,第一個步驟:

  • 簡介您的數據庫。查看用戶可以執行的每個操作產生的查詢,並仔細查看該查詢是否是執行該工作最有效的方式。重構基於遊標的操作;你不希望這些操作在任何希望快速執行的操作中執行,因爲它們會縮短SQL引擎在處理數字時可能給你帶來的很多麻煩。
  • 確定最常用於過濾/檢索結果的標準,特別是在平等的情況下,並製作這些羣集主鍵。集羣密鑰將使服務器在同一頁數據上安排具有相同標準的數據,以便更快地檢索可能在塊中檢索的數據。不過要小心,太多索引會降低性能。
  • 如果查詢看起來不錯,並且它針對索引良好的模式執行,但仍然很慢,請考慮將查詢重構爲表值函數或存儲過程。這些都是預編譯的,並且預先設計了一個查詢計劃,可以節省您在公共數據庫調用上的開銷。他們還需要通過網絡發送更少的信息。
  • 在Web服務器端的會話存儲或其他內存中存儲庫中緩存一些更昂貴的查詢的結果,尤其是由多個頁面共享的數據和/或不太可能快速更改的數據。您的網絡服務器需要大量內存。
  • 還不夠?向DB服務器計算機投擲更多硬件。
  • 考慮分佈式模型;大多數主要的DBMS可以在集羣環境中工作。您如何構建該模型取決於您的模式和所執行的操作;大多數情況下,按地理區域分類數據的效果很好,即使是像Facebook這樣的巨人。
  • 儘管如此,您可以通過整合異步技術(如AJAX)來提高UI的響應速度;當數據庫服務器仍在攪動時,頁面的框架可以加載並顯示在瀏覽器中,然後數據可以異步跟隨並以延遲方式呈現到頁面中。