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

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

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

回答
編輯回答
墨染殤

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

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

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

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

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

我自己的想法(不涉及表的設(shè)計(jì)):

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