問題:
主從復制數據是異步完成的,這就導致主從數據庫中的數據有一定的延遲,在讀寫分離的設計中必須要考慮這一點。以博客為例,用戶登錄后發表了一篇文章,他需要馬上看到自己的文章,但是對於其它用戶來講可以允許延遲一段時間(1分鍾/5分鍾/30分鍾),不會造成什么問題。這時對於當前用戶就需要讀主數據庫,對於其他訪問量更大的外部用戶就可以讀從數據庫。
回答:
STEP1:優化數據庫
1、將數據庫體積定時的清理保持苗條的身材。
2、表要盡量簡單,關系不要太復雜,盡量不要太多索引。
STEP2:優化程序
1、利用客戶端緩存,減少對數據庫的反復讀取,當用戶讀取一次評論之后便將評論信息寫入本地cookie,當用戶在一段時間內不停刷新頁面的時候,就不讓他再讀數據庫了直接去cookie里面取數據。添加到數據庫數據成功的同時也返回數據告訴客戶端也添加到cookie里面去。這樣用戶就知道他自己成功評論了,而且不論他怎么刷都傷不到服務器。
2、利用緩存服務器的緩存,減少對數據庫的反復讀取,和cookie差不多,只不過是存在了服務器的內存里面。這樣比讀數據庫快,但是需要注意這種情況下,如果用戶玩命的刷,服務器還是很傷。就算是讀內存還是得讀服務器的東西。
3、沒必要將所有的評論都放在數據庫里,如果評論太多太久遠的沒有意義的就刪了吧。或者干脆靜態化了得了,減少數據庫的體積。
4、關於同一時間並發的評論,直接先不寫數據庫,先全寫到內存里去合並數量,然后按照數據庫能接受的節奏,寫進數據庫。其實這個也是治標不治本,真正的洪流來了,怎么優化都沒用。直接封IP吧。
STEP3:提升配置(治標不治本)
大招:
告訴用戶他的數據已經提交,但是服務器更新需要一定的時間,請不要着急等30秒后刷新看看。這招最簡單,根本就不用什么程序。
參考鏈接:
https://bbs.aliyun.com/read/231556.html?page=e