背景:的性能數據庫設計注重信譽
我試圖優化回報率完整的Ajax驅動的論壇。由於RoR已經不是完整的ajax站點的最佳平臺,我正試圖優化我的sql請求和存儲。
問題:
上崗的聲譽是基於簡單的喜歡/不喜歡從0-100%打算,而主要只有最後100票應該算加上所有其他職位的聲譽的10%誰參考/回覆該帖子。現在,將數值存儲在數據庫中以實現快速讀取的最有效方法是什麼?對於Post.reputation
嘗試的解決方案:
一)讀取所有對每個請求seperately連接。這將讀取巨大的連接表並計算連接。這是否會創建一個大的服務器負載,因爲它加載了很多條目,或者不是一個問題,因爲它基本上只有一個表?
b)根本不使用連接,但將信譽總和存儲在actual
(喜歡+1,子喜歡+0.1)和potential
(喜歡或不喜歡+1,喜歡或不喜歡+0.1) -dislike)。然後Post.reputation
將是actual/potential
。同時,我必須仍然使用users_posts
的連接限制每個帖子投1票。在我看來,這將是具有最佳性能的解決方案,但有沒有一種方法可以通過額外的變量來實現100個投票計數限制?因爲我似乎幾乎放棄了關於選票順序的信息,這對於這一點很重要。
三)基本存儲所有聯接在一)但在數據庫中DB額外存儲的信譽值讀取和計算+寫它只要加入爲參照添加。在數據庫中多次存儲相同的信息是否是一種糟糕的方式?
問:
哪種解決方案是最聰明的存儲在我的數據庫,信息和訪問它快速/常?
在MySql上降序索引工作嗎? – Nikom
MySQL沒有DESC索引(更正了我的答案)。但是,這並不影響指定:命令是DESC。在這種情況下,MySQL將執行反向索引遍歷,這非常有效(請參閱http://dev.mysql.com/doc/refman/5.6/en/order-by-optimization.html)。 –