鍍金池/ 問答/數(shù)據(jù)庫/ 高并發(fā)的時候,數(shù)據(jù)庫該怎么維護和設計。

高并發(fā)的時候,數(shù)據(jù)庫該怎么維護和設計。

如果數(shù)據(jù)庫采用讀寫分離策略的時候,大致的套路就是讓master數(shù)據(jù)庫處理寫操作,slave數(shù)據(jù)庫處理讀操作,
但是寫入大量數(shù)據(jù)master可能架不住,發(fā)生了延遲這種情況該怎么解決?
對數(shù)據(jù)庫操作和優(yōu)化也是相當重要的,但是這一系列數(shù)據(jù)庫的優(yōu)化又該怎么做呢?
(我們的并發(fā)是6000包括查詢和寫入)

回答
編輯回答
墨染殤

你說的思路比較亂,先聚焦一下問題:

如果是持續(xù)的寫入壓力大,且超過單臺服務器磁盤IO寫入能力,最簡單的辦法就是mysql分為多個數(shù)據(jù)庫,保證數(shù)據(jù)能分布不同的磁盤設備上,以提升寫入的能力。

如果只是高峰期的寫入壓力大,可以考慮讀寫主要靠緩存的方案,后臺同步到數(shù)據(jù)庫,但這樣對緩存的可用性、數(shù)據(jù)預熱方面的要求較高。

java方面的優(yōu)化,主要是提高接入能力,和后端數(shù)據(jù)庫是否能支持大數(shù)據(jù)寫入沒關系。

2017年11月12日 16:17
編輯回答
失心人

我自己的想法(不涉及表的設計):

1.dataBase
    1).MySQL采用分表策略,來獲得更大的查詢吞吐量,減少單表并發(fā)和流量,
    2).提高MySQL并發(fā)(默認并發(fā)是100):set global max_connections
    3).優(yōu)化SQL語句減少函數(shù)計算和合理利用索引,函數(shù)盡可能讓代碼去計算
    4).選擇合適的存儲引擎讀比寫多可是選擇innodb
    5).采用redis緩存,讓緩存硬抗一波讀的洪流
    6).數(shù)據(jù)庫采用mysql集群利用官網的MySQL Proxy解決延遲
2.Java程序
    1).寫入數(shù)據(jù)庫的時候不允許直接操作數(shù)據(jù)庫,可以先寫入消息隊列
    2).利用Nginx集群負載均衡和Tomcat集群(運行模式設置為NIO)
    3).連接池采用阿里開源的druid連接池(看看這篇文章:https://juejin.im/entry/58fb03220ce4630061233c98),
    4).JVM加內存,代碼調優(yōu)
  這是我自己的想法
    
2017年7月31日 12:50