數據庫高並發解決方案(二)部署優化


一個項目剛開始的時候是為了實現基本功能,隨着版本和功能的迭代,大數據和高並發成了軟件設計必須考慮的問題!

本質很簡單,一個是慢,一個是等。

兩者是相互關聯的,因為慢,所以要等,因為等,所以慢,解決了慢,也就解決了等,解決了等,也就解決了慢。

關鍵是如何解決慢和等,

核心 一個是短一個是少一個是分流,最后一個是集群/橫向擴張/讀寫分離/建立主從

頁面靜態化- 用戶可以直接獲取頁面,不用走那么多流程,比較適用於頁面不頻繁更新。
使用緩存- 第一次獲取數據從數據庫准提取,然后保存在緩存中,以后就可以直接從緩存提取數據。不過需要有機制維持緩存和數據庫的一致性。

使用儲存過程-那些處理一次請求需要多次訪問數據庫的操作,可以把操作整合到儲存過程,這樣只要一次數據庫訪問就可以了。

批量讀取 - 高並發情況下,可以把多個請求的查詢合並到一次進行,以減少數據庫的訪問次數

延遲修改 - 高並發情況下,可以把多次修改請求,先保存在緩存中,然后定時將緩存中的數據保存到數據庫中,風險是可能會斷電丟失緩存中的數據,

使用索引 - 索引可以看作是特殊的緩存,盡量使用索引就要求where字句中精確的給出索引列的值。

1,分表 - 把本來同一張表的內容,可以按照地區,類別等分成多張表,很簡單的一個思路,但是要盡量避免分出來的多表關聯查詢。

2,分離活躍數據 - 例如登錄用戶業務,注冊用戶很多,但是活躍的登錄用戶很少,可以把活躍用戶專門保存一張表,查詢是先查詢活躍表,沒有的話再查總表,這也類似與緩存啦。

3, 分塊 - 數據庫層面的優化,對程序是透明的,查詢大數據只用找到相應塊就行;如交易模塊

分流

1,集群 - 將並發請求分配到不同的服務器上,可以是業務應用服務器APP,也可以是數據庫服務器。

2,分布式 - 分布式是把單次請求的多項業務邏輯分配到多個服務器上,這樣可以同步處理很多邏輯,一般使用與特別復雜的業務請求。

3,CDN - 在域名解析層面的分流,例如將華南地區的用戶請求分配到華南的服務器,華中地區的用戶請求分配到華中的服務器。

4,分庫分表 -

水平拆分【分表】:

對於訪問極為頻繁且數據量巨大的單表來說,首先要做的是減少單表的記錄條數,以便減少數據查詢所需的時間,提高數據庫的吞吐,這就是所謂的分表【水平拆分】

垂直拆分【分庫】:

是根據業務耦合性,將關聯度低的不同表存儲在不同的數據庫上,對數據庫進行拆分,從而提高數據庫寫入能力,即分庫【垂直拆分】

 

建立主從 - 讀寫分離就是只在主服務器上寫,只在從服務器上讀,基本原理是讓主數據庫處理事務性查詢,
而從數據庫處理select查詢,數據庫復制被用於把事務性查詢(增刪改)導致的改變;以毫秒級的更新同步到集群中的從數據庫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM