mysql高并發設計
一、部署方案
https://blog.csdn.net/weixin_37519752/article/details/138728036
方案1:雙主
1、優點
寫入擴展性:兩個節點都可以處理寫入操作,提高了寫入操作的擴展性。
高可用性:在任一節點故障時,另一個節點仍可繼續提供服務,包括寫入操作。
故障轉移:無需復雜的故障轉移機制,因為兩個節點都是活躍的。
2、缺點
數據一致性:需要復雜的沖突檢測和解決機制來保持數據一致性。
網絡要求:對網絡穩定性和延遲有較高要求,因為節點間的實時同步對網絡質量敏感。
額外開銷:實時同步帶來的額外網絡和磁盤I/O開銷。
3、適用場景
分布式應用:需要在不同地理位置提供寫入能力的應用。
高寫入負載:需要分散寫入負載以提高性能的場景。
實時數據需求:需要在多個節點實時同步數據的應用。
方案2:主從復制
一主一從,或者一主多從 mysql5.7以上版本支持
1、優點
數據冗余:提供了數據的熱備份,降低了數據丟失的風險。
性能提升:一主多從,不同用戶從不同數據庫讀取,性能提升。
擴展性:流量增大時,可以方便地增加從服務器,不影響系統使用。
負載均衡:一主多從相當于分擔了主機任務,做了負載均衡。
2、缺點
數據延遲:由于復制是異步的,存在數據復制延遲的風險。
復雜性增加:增加了系統的復雜性,需要更多的維護和管理。
額外資源消耗:需要額外的硬件資源來部署從服務器。
寫入性能影響:所有寫入操作都在主服務器上執行,可能成為性能瓶頸。
3、適用場景
讀寫分離:適用于讀操作遠多于寫操作的場景。
數據備份:用于數據的實時備份,以防止數據丟失。
高可用性需求:需要保證服務連續性的關鍵應用
二、mysql性能優化
1、使用索引
索引是對表中數據進行高效查詢的關鍵。在MySQL中,可以使用B-Tree索引或哈希索引來加速查詢操作
示例:
CREATE INDEX index_name ON table_name (column1, column2, ...);
2、優化查詢語句
優化查詢可以提高MySQL性能。可以通過合適的查詢語句、索引和緩存機制來減少查詢的執行時間,避免全表掃描和不必要的數據操作
示例:
# 通過使用索引和合適的查詢語句
SELECT * FROM table_name WHERE column1 = "value" AND column2 = "value";# 避免使用通配符查詢,可以使用索引來加速查詢
SELECT * FROM table_name WHERE column1 LIKE "value%";# 避免在查詢條件中使用函數,函數會導致索引失效
SELECT * FROM table_name WHERE DATE(column1) > "2021-01-01";
3、緩存優化
MySQL的緩存機制可以提高查詢性能。通過適當設置查詢緩存和系統緩存,可以減少磁盤IO操作,加快查詢的執行速度。使用MySQL的查詢緩存、InnoDB的緩沖池等
# 啟用查詢緩存
query_cache_type = 1
query_cache_size = 64M
4、分區分表
當數據量非常大時,可以考慮使用分區和分表來提高查詢性能。分區將數據劃分成多個較小的邏輯部分,每個部分可以獨立地進行查詢和維護。而分表是將一個大表拆分成多個小表,每個小表存儲一部分數據。
# 分區
CREATE TABLE table_name (...
)
PARTITION BY RANGE (column_name) (PARTITION p1 VALUES LESS THAN (value1),PARTITION p2 VALUES LESS THAN (value2),...
)# 分表
CREATE TABLE table_name (...
)
PARTITION BY HASH (column_name) PARTITIONS 4;
5、參數調優
https://blog.51cto.com/u_12196/6967500
https://blog.51cto.com/u_13259/6936668
6、連接池管理
連接池是一種管理數據庫連接的技術,可以有效地減少連接的創建和銷毀開銷。在高并發環境下,連接池可以提前創建好一定數量的連接,并將其保存在連接池中。當有新的請求到來時,可以從連接池中獲取連接,而不需要每次都重新創建連接。這樣可以大大提高并發處理能力。
7、硬件優化:
使用高性能的硬件設備,如高速CPU、大容量內存和高速磁盤,以提升數據庫的處理能力