mysql數(shù)據(jù)量大怎么處理 寫入mysql數(shù)據(jù)庫的數(shù)據(jù)量很大,數(shù)據(jù)庫架構(gòu)該怎么去設(shè)計(jì)?
寫入mysql數(shù)據(jù)庫的數(shù)據(jù)量很大,數(shù)據(jù)庫架構(gòu)該怎么去設(shè)計(jì)?對于這種大數(shù)據(jù)系統(tǒng),業(yè)界有很多成熟的解決方案最簡單的解決方案就是將讀寫操作分開。寫操作只寫在主數(shù)據(jù)庫中,配置自動(dòng)同步到從數(shù)據(jù)庫。將部分讀操作改
寫入mysql數(shù)據(jù)庫的數(shù)據(jù)量很大,數(shù)據(jù)庫架構(gòu)該怎么去設(shè)計(jì)?
對于這種大數(shù)據(jù)系統(tǒng),業(yè)界有很多成熟的解決方案
最簡單的解決方案就是將讀寫操作分開。寫操作只寫在主數(shù)據(jù)庫中,配置自動(dòng)同步到從數(shù)據(jù)庫。將部分讀操作改為從操作,以減輕主數(shù)據(jù)庫的壓力。
您還可以向應(yīng)用程序添加redis緩存。查詢時(shí),可以先讀取緩存,如果無法讀取,則可以讀取數(shù)據(jù)庫。
如果是這種情況,壓力仍然過高,所以我們應(yīng)該考慮子表。
有許多方法可以將熱數(shù)據(jù)分離到表中,將非熱數(shù)據(jù)分離到表中?;蛘吒鶕?jù)用戶ID的結(jié)束號進(jìn)行散列,并在不同的表中分布不同的表。
如果讀寫要求已超過單機(jī)支持能力,則需要考慮集群。你可以用MYCAT搜索如何建立一個(gè)數(shù)據(jù)庫集群
在正常配置下,MySQL只能承載2000萬個(gè)數(shù)據(jù)(讀寫同時(shí)進(jìn)行,表中有大的文本字段,一臺(tái)服務(wù)器)?,F(xiàn)在已經(jīng)超過1億,而且還在增加,建議按以下方式處理:
1子表。它可以按時(shí)間或一定的規(guī)則進(jìn)行拆分,以便盡可能地查詢子表中的數(shù)據(jù)庫。這是最有效的方法。特別是寫,放入一個(gè)新表,并定期同步。如果記錄不斷更新,最好將寫入的數(shù)據(jù)放在redis中,并定期同步表3的大文本字段,將它們分隔成一個(gè)新的獨(dú)立表。對于較大的文本字段,可以使用NoSQL數(shù)據(jù)庫
4優(yōu)化體系結(jié)構(gòu),或者優(yōu)化SQL查詢,避免聯(lián)合表查詢,盡量不要使用count(*)、in、recursion等性能消耗語句
5使用內(nèi)存緩存,或者在前端讀取時(shí)增加緩存數(shù)據(jù)庫。重復(fù)讀取時(shí),直接從緩存中讀取。
以上是一種低成本的管理方法,基本上幾個(gè)服務(wù)器就可以做到,但是管理起來有點(diǎn)麻煩。
當(dāng)然,如果總體數(shù)據(jù)量特別大,并且您不關(guān)心投資成本,請使用集群或tidb