2016-07-24 62 views
0

朋友們,需要優化數據庫中聊天消息的保存方式MySql.Database類型並不重要。聊天工作代碼在數據庫表中存儲消息單條消息的原則是一條線。如果用戶的數量是1000-10000,並且可能更多,那麼可以想象,表中有多少行。一種選擇是將所有帖子放入緩存中(文件,APC,甚至原則上可以存儲在Redis中),並且每隔24小時從cron以json字符串的形式將其注入主基礎中。讓那一天得到這一條記錄。如何優化聊天消息在數據庫中的存儲

有必要優化方法。我認爲這是真的嗎?有沒有可能改進這個選擇,還是有更好的辦法? 謝謝。

+1

@ C0dekid這是一個非常嚴重的問題。因爲數據庫可能因爲錯誤的方法而中斷 –

+1

「表格可以很快填充」 - 一個MySQL表格可以容納十億七千三百七十四萬一千八百二十四行。你每天會收到多少條消息,能夠很快填補這些消息? – Quentin

+0

@Quentin每次抽出這些消息需要多長時間? –

回答

1

這個問題相當廣泛 - 可以說是基於觀點的。

但是...

你必須平衡設計中的各種顧慮。性能和可擴展性的一端,努力構建和維護,以及另一端的基礎架構。在大多數情況下,努力和成本方面很重要。因此,我的建議是從一個關係模型開始,沒有緩存,分片等,但是具有強大的數據庫服務器,乾淨的關係模式以及對查詢優化的大量關注。根據我的經驗,這使得該應用程序能夠爲數萬個併發用戶提供足夠的速度,可以存儲幾十或幾百萬行而不會影響性能,而且對於構建和維護都是最具成本效益的。硬件通常比開發者時間便宜得多。

我還建議設置一個性能和可​​伸縮性測試系統,具有代表性的數據和負載測試框架(如Apache JMeter)。使用這個系統來驗證你的系統在負載和大量數據下的執行情況。設置性能和可伸縮性目標,例如「10K併發用戶,100萬條舊消息,響應時間必須爲1秒<」。

在你的負載測試環境中運行定期測試,優化和調整模式,查詢等,並繼續這樣做,直到你真的無處可去。

我的猜測是,它會帶你大量的流量達到這一點。

一旦你達到那一點,緩存可能是下一步。這不是微不足道的,特別是在聊天應用程序中。你必須確保高速緩存支付自己的費用(即高速緩存命中率足夠高以使它有所作爲;通常,這意味着至少有10%),並且你不用花太多時間管理緩存(例如,當您發佈新消息時會失效),它會造成更多的傷害而不是好的。

所以,證明你有一個真正的,可衡量的需求,然後進行優化。

+0

謝謝,我會考慮你的話。但那不是我需要的:(而且它不是那麼廣泛的話題。 –

相關問題