一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)庫(kù)優(yōu)化最有效的方式是什么?

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2023-02-28 09:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

記得,如果有人問(wèn)你做數(shù)據(jù)庫(kù)優(yōu)化最有效的方式是什么?SQL優(yōu)化、分布式集群、分庫(kù)分表!干就完了~ 但上來(lái)就考慮分庫(kù)分表真的合適么,你對(duì)分庫(kù)分表又理解多少呢?什么時(shí)候分?有幾種分法兒?別想了,快上車(chē)!哈哥帶你捋一下分庫(kù)分表的額各種玩兒法~記得收藏

首先我們要知道分庫(kù)、分表都是干啥的,本文主角還是我們的MySQL為第一視角。首先從字面意思來(lái)看:

  • 分庫(kù):由單個(gè)數(shù)據(jù)庫(kù)實(shí)例拆分成多個(gè)數(shù)據(jù)庫(kù)實(shí)例,將數(shù)據(jù)分布到多個(gè)數(shù)據(jù)庫(kù)實(shí)中。


  • 分表:由單張表拆分成多張表,將數(shù)據(jù)劃分到多張表內(nèi)。

要知道,對(duì)于大型互聯(lián)網(wǎng)項(xiàng)目,數(shù)據(jù)量級(jí)可能不是我們能想到的,每日新增數(shù)據(jù)量過(guò)千萬(wàn)是常有的事兒,想靠單臺(tái)MySQL服務(wù)器是不現(xiàn)實(shí)的。你項(xiàng)羽再牛B,也頂不住四個(gè)隊(duì)友掛機(jī)?。?!項(xiàng)羽:???

隨著業(yè)務(wù)數(shù)據(jù)量和網(wǎng)站QPS日益增高,對(duì)數(shù)據(jù)庫(kù)壓力也越來(lái)越大,單機(jī)版數(shù)據(jù)庫(kù)很快會(huì)到達(dá)存儲(chǔ)和并發(fā)瓶頸,就需要做數(shù)據(jù)庫(kù)性能方面的優(yōu)化,分庫(kù)分表采取的是分而治之的策略,分庫(kù)目的是減輕單臺(tái)MySQL實(shí)例存儲(chǔ)壓力及可擴(kuò)展性,而分表是解決單張表數(shù)據(jù)過(guò)大以后查詢(xún)的瓶頸問(wèn)題,坦白說(shuō),這些問(wèn)題也是所有關(guān)系型數(shù)據(jù)庫(kù)的“硬傷”。

今天我們就基于常見(jiàn)分庫(kù)、分表的策略方式以及場(chǎng)景,來(lái)搞清楚我們到底啥時(shí)候用的到。常用策略包括:垂直分表、水平分表、垂直分庫(kù)、水平分庫(kù)。

一、樸實(shí)無(wú)華的 - 分表

1、垂直分表

垂直分表,或者叫豎著切表,是不是感受到該策略是以字段為依據(jù)的!主要按照字段的活躍性、字段長(zhǎng)度,將表中字段拆分到不同的表(主表和擴(kuò)展表)中。

特點(diǎn):

  • 每個(gè)表的結(jié)構(gòu)都不一樣;
  • 每個(gè)表的數(shù)據(jù)也不一樣,
  • 有一個(gè)關(guān)聯(lián)字段,一般是主鍵或外鍵,用于關(guān)聯(lián)兄弟表數(shù)據(jù);
  • 所有兄弟表的并集是該表的全量數(shù)據(jù);

場(chǎng)景:

  1. 有幾個(gè)字段屬于熱點(diǎn)字段,更新頻率很高,要把這些字段單獨(dú)切到一張表里,不然innodb行鎖很惡心的,鎖死你呀~~如用戶表里的余額字段?不,我的余額就很穩(wěn)定,一直是0。。
  2. 有大字段,如text,存儲(chǔ)壓力很大,畢竟innodb數(shù)據(jù)和索引是同一個(gè)文件;同時(shí),我又喜歡用SELECT *,你懂得,這磁盤(pán)IO消耗的,跟玩兒似的,誰(shuí)都扛不住的。
  3. 有明顯的業(yè)務(wù)區(qū)分,或表結(jié)構(gòu)設(shè)計(jì)時(shí)字段冗余;有些小伙伴看到第一點(diǎn)時(shí),就發(fā)現(xiàn)陳哈哈是個(gè)菜雞,用戶表怎么會(huì)有余額字段?明顯有問(wèn)題啊!趕緊先到評(píng)論區(qū)噴陳哈哈一波~~然后笑嘻嘻的發(fā)現(xiàn)原來(lái)是個(gè)小尾巴,真不要臉是吧。。是的,因此不同業(yè)務(wù)我們要把具體字段拆開(kāi),這樣才有利于業(yè)務(wù)后續(xù)擴(kuò)展哦。

2、水平分表

水平分表,也叫“橫著切”。。以行數(shù)據(jù)為依據(jù)進(jìn)行切分,一般按照某列的自容進(jìn)行切分。

手機(jī)號(hào)表,我們可以通過(guò)前兩位或前三位進(jìn)行切分,如131、132、133 → phone_131、phone_132、phone_133,手機(jī)號(hào)有11位(100億),量大是很正常的事兒,這年頭誰(shuí)家老頭老太太每個(gè)手機(jī)呢是吧。這樣切就把一張大表切成了好幾十張小表,數(shù)據(jù)量不就下來(lái)了。有同學(xué)就問(wèn)了那我怎么知道我這手機(jī)號(hào)查哪個(gè)表呢?一看你就沒(méi)認(rèn)真看前兩行標(biāo)紅的點(diǎn),為啥標(biāo)紅嘞?比如我查13100001111,那我截取前三位,動(dòng)態(tài)拼接到查詢(xún)的表名上,就行了。

特點(diǎn):

  • 每個(gè)表的結(jié)構(gòu)都一樣;
  • 每個(gè)表的數(shù)據(jù)都不一樣,沒(méi)有交集;
  • 所有表的并集是該表的全量數(shù)據(jù);

場(chǎng)景:?jiǎn)伪淼臄?shù)據(jù)量過(guò)大或增長(zhǎng)速度很快,已經(jīng)影響或即將會(huì)影響SQL查詢(xún)效率,加重了CPU負(fù)擔(dān),提前到達(dá)瓶頸。記得水平分表越早越好,別問(wèn)我為什么。。

二、花里胡哨的 - 分庫(kù)

需要你注意的是,傳統(tǒng)的分庫(kù)和我們熟悉的集群、主從復(fù)制可不是一個(gè)事兒;多節(jié)點(diǎn)集群是將一個(gè)庫(kù)復(fù)制成N個(gè)庫(kù),從而通過(guò)讀寫(xiě)分離實(shí)現(xiàn)多個(gè)MySQL服務(wù)的負(fù)載均衡,實(shí)際是圍繞一個(gè)庫(kù)來(lái)搞的,這個(gè)庫(kù)稱(chēng)為Master主庫(kù)。而分庫(kù)就不同了,分庫(kù)是將這個(gè)主庫(kù)一分為N,比如一分為二,然后針對(duì)這兩個(gè)主庫(kù),再配置2N個(gè)從庫(kù)節(jié)點(diǎn)。

3、垂直分庫(kù)

縱向切庫(kù),太經(jīng)典的切分方式,基于表進(jìn)行切分,通常是把新的業(yè)務(wù)模塊或集成公共模塊拆分出去,比如我們最熟悉的單點(diǎn)登錄、鑒權(quán)模塊。熟悉的味道,記得有一次我把一些沒(méi)用的表切到一個(gè)性能很好的服務(wù)器中,這服務(wù)器我專(zhuān)門(mén)用來(lái)學(xué)習(xí),后來(lái)也不知被哪個(gè)狗腿子告密了~ 我你個(gè),有種站出來(lái),你個(gè)**東西。

47557db0-b2fc-11ed-bfe3-dac502259ad0.png

特點(diǎn):

  • 每個(gè)庫(kù)的表都不一樣;
  • 表不一樣,數(shù)據(jù)就更不一樣了~ 沒(méi)有任何交集;
  • 每個(gè)庫(kù)相對(duì)獨(dú)立,模塊化

場(chǎng)景:可以抽象出單獨(dú)的業(yè)務(wù)模塊時(shí),可以抽象出公共區(qū)時(shí)(如字典、公共時(shí)間、公共配置等),或者想有一臺(tái)屬于自己的服務(wù)器時(shí)?

4、水平分庫(kù)

以行數(shù)據(jù)為依據(jù),將一個(gè)庫(kù)中的數(shù)據(jù)拆分到多個(gè)庫(kù)中。大型分表體驗(yàn)一下?坦白說(shuō)這種策略并不實(shí)用,因?yàn)闀?huì)對(duì)后臺(tái)開(kāi)發(fā)很不友好,有很多坑,不建議采用,理解即可。

特點(diǎn):

  • 每個(gè)庫(kù)的結(jié)構(gòu)都一樣;
  • 每個(gè)庫(kù)的數(shù)據(jù)都不一樣,沒(méi)有交集;
  • 所有庫(kù)的并集是全量數(shù)據(jù);

場(chǎng)景:系統(tǒng)絕對(duì)并發(fā)量上來(lái)了,CPU內(nèi)存壓力大。分表難以根本上解決量的問(wèn)題,并且還沒(méi)有明顯的業(yè)務(wù)歸屬來(lái)垂直分庫(kù),主庫(kù)磁盤(pán)接近飽和。

總結(jié)

本文就到這里,希望你學(xué)廢了!其實(shí),在實(shí)際工作中,我們?cè)谶x擇分庫(kù)分表策略前,想到的應(yīng)該是從緩存、讀寫(xiě)分離、SQL優(yōu)化等方面,因?yàn)檫@些能夠更直接、代價(jià)更小的解決問(wèn)題。要記住動(dòng)表就是動(dòng)根本,你永遠(yuǎn)不知道這張表后面會(huì)連帶多少歷史遺留問(wèn)題,如果是個(gè)很大型的項(xiàng)目,遇到些問(wèn)題你就跟經(jīng)理提議要分庫(kù)分表,小心被呼死~

好了,多了就不說(shuō)了,我勸你耗子尾汁,但推薦你關(guān)注我,因?yàn)槲視?huì)讓你在快樂(lè)中學(xué)會(huì)很多東西!

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 結(jié)構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    119

    瀏覽量

    21995
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3926

    瀏覽量

    66214
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    860

    瀏覽量

    27929

原文標(biāo)題:老大讓我優(yōu)化數(shù)據(jù)庫(kù),我上來(lái)就分庫(kù)分表,他過(guò)來(lái)就是一jio

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    數(shù)據(jù)庫(kù)SQL的優(yōu)化

    數(shù)據(jù)庫(kù)執(zhí)行SQL都會(huì)先進(jìn)行語(yǔ)義解析,然后將SQL分成一步一步可執(zhí)行的計(jì)劃,然后逐步執(zhí)行。通過(guò)分析執(zhí)行計(jì)劃,我們可以清晰的看到數(shù)據(jù)庫(kù)執(zhí)行的操作,這對(duì)于數(shù)據(jù)庫(kù)SQL的優(yōu)化具有重大意義。 1
    的頭像 發(fā)表于 10-09 15:43 ?1343次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b>SQL的<b class='flag-5'>優(yōu)化</b>

    基于數(shù)據(jù)庫(kù)查詢(xún)過(guò)程優(yōu)化設(shè)計(jì)

    在大型關(guān)系數(shù)據(jù)庫(kù)管理與開(kāi)發(fā)中,優(yōu)化設(shè)計(jì)極大地提高數(shù)據(jù)庫(kù)的性能。通過(guò)對(duì)一大型數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句執(zhí)行過(guò)程的討論,提出了對(duì)同一表格進(jìn)行多個(gè)選擇運(yùn)算的優(yōu)化
    發(fā)表于 02-27 16:05 ?18次下載

    數(shù)據(jù)庫(kù)筆記

    可以有效的學(xué)習(xí)sql數(shù)據(jù)庫(kù),可以順利編寫(xiě)一種sql數(shù)據(jù)庫(kù)
    發(fā)表于 06-20 17:48 ?0次下載

    如何優(yōu)化數(shù)據(jù)庫(kù)負(fù)載

    摘要:一個(gè)前端開(kāi)發(fā)者介紹了他和他的數(shù)據(jù)庫(kù)朋友們是如何降低基于Ruby網(wǎng)站數(shù)據(jù)庫(kù)負(fù)載的故事。以下為譯文: 數(shù)據(jù)庫(kù)負(fù)載可能是個(gè)沉默的性能殺手。我一直都在優(yōu)化我的一個(gè)網(wǎng)站應(yīng)用,用來(lái)吸引人們參
    發(fā)表于 09-28 16:32 ?0次下載

    提高Oracle的數(shù)據(jù)庫(kù)性能

    問(wèn)題。通過(guò)優(yōu)化SQL語(yǔ)句效率、擴(kuò)充高級(jí)緩沖區(qū)和配置重做日志緩沖區(qū)等幾個(gè)方面介紹了Oracle數(shù)據(jù)庫(kù)優(yōu)化方法,探討了OraCle如何提高性能優(yōu)化的措施。通過(guò)測(cè)試Oracle查詢(xún)結(jié)果表明,
    發(fā)表于 11-11 18:16 ?4次下載

    醫(yī)院SQL數(shù)據(jù)庫(kù)系統(tǒng)語(yǔ)句優(yōu)化

    本文就如何優(yōu)化大型數(shù)據(jù)庫(kù)的性能進(jìn)行了一些探索,提出了優(yōu)化數(shù)據(jù)庫(kù)訪問(wèn)性能的若干策略,特別是對(duì)SQL語(yǔ)句進(jìn)行了有效的分析設(shè)計(jì)的問(wèn)題,以使其加快執(zhí)
    的頭像 發(fā)表于 02-17 20:26 ?5564次閱讀

    基于Greenplum數(shù)據(jù)庫(kù)的查詢(xún)優(yōu)化

    針對(duì)分布式數(shù)據(jù)庫(kù)查詢(xún)效率隨著數(shù)據(jù)規(guī)模的增大而降低的問(wèn)題,以Greenplum分布式數(shù)據(jù)庫(kù)為研究對(duì)象,從優(yōu)化查詢(xún)路徑的角度提出一個(gè)基于代價(jià)的最優(yōu)查詢(xún)計(jì)劃生成方法。首先,該方法設(shè)計(jì)一種
    發(fā)表于 03-29 17:46 ?0次下載

    專(zhuān)訪阿里數(shù)據(jù)庫(kù)備份專(zhuān)家 教你pick最有效的備份系統(tǒng)

    摘要:?數(shù)據(jù)庫(kù)備份是個(gè)老生常談的話題,看似很簡(jiǎn)單,但在實(shí)際操作過(guò)程中,運(yùn)維人員往往會(huì)遇到這樣或那樣的坑。那么,如今的數(shù)據(jù)庫(kù)備份有哪些挑戰(zhàn)?如何構(gòu)建有效備份系統(tǒng)?有什么解決辦法?數(shù)據(jù)庫(kù)
    發(fā)表于 08-20 14:43 ?314次閱讀

    數(shù)據(jù)庫(kù)的設(shè)計(jì)資料概述

    數(shù)據(jù)庫(kù)設(shè)計(jì)是指對(duì)于一個(gè)給定的應(yīng)用環(huán)境,構(gòu)造(設(shè)計(jì))優(yōu)化數(shù)據(jù)庫(kù)邏輯模式和物理結(jié)構(gòu),并據(jù)此建立數(shù)據(jù)庫(kù)及其應(yīng)用系統(tǒng),使之能夠有效地存儲(chǔ)和管理
    發(fā)表于 03-12 15:49 ?10次下載
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b>的設(shè)計(jì)資料概述

    數(shù)據(jù)庫(kù)和自建數(shù)據(jù)庫(kù)的區(qū)別及應(yīng)用

    數(shù)據(jù)庫(kù)是指優(yōu)化和部署在云端的數(shù)據(jù)庫(kù),阿里云和騰訊云都提供云數(shù)據(jù)庫(kù),云數(shù)據(jù)庫(kù)和自己搭建的數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 11-20 16:26 ?4965次閱讀
    云<b class='flag-5'>數(shù)據(jù)庫(kù)</b>和自建<b class='flag-5'>數(shù)據(jù)庫(kù)</b>的區(qū)別及應(yīng)用

    數(shù)據(jù)庫(kù)索引使用策略及優(yōu)化

    的內(nèi)容完全基于上文的理論基礎(chǔ),實(shí)際上一旦理解了索引背后的機(jī)制,那么選擇高性能的策略就變成了純粹的推理,并且可以理解這些策略背后的邏輯。 示例數(shù)據(jù)庫(kù) 為了討論索引策略,需要一個(gè)數(shù)據(jù)量不算小的數(shù)據(jù)庫(kù)作為示例。本文選用MySQL官方文
    的頭像 發(fā)表于 11-02 15:13 ?1978次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b>索引使用策略及<b class='flag-5'>優(yōu)化</b>

    MySQL數(shù)據(jù)庫(kù)性能優(yōu)化的意義及其措施

    數(shù)據(jù)庫(kù)性能優(yōu)化的常見(jiàn)手段有很多,比如添加索引、分庫(kù)分表、優(yōu)化連接池等
    的頭像 發(fā)表于 02-03 14:12 ?1618次閱讀

    什么是向量數(shù)據(jù)庫(kù)?關(guān)系數(shù)據(jù)庫(kù)和向量數(shù)據(jù)庫(kù)之間的區(qū)別是什么?

    向量數(shù)據(jù)庫(kù)是一種以向量嵌入(高維向量)方式存儲(chǔ)和管理非結(jié)構(gòu)化數(shù)據(jù)(如文本、圖像或音頻)的數(shù)據(jù)庫(kù),以便于快速查找和檢索類(lèi)似對(duì)象。
    的頭像 發(fā)表于 08-16 10:13 ?3178次閱讀
    什么是向量<b class='flag-5'>數(shù)據(jù)庫(kù)</b>?關(guān)系<b class='flag-5'>數(shù)據(jù)庫(kù)</b>和向量<b class='flag-5'>數(shù)據(jù)庫(kù)</b>之間的區(qū)別是什么?

    數(shù)據(jù)庫(kù)應(yīng)用及其特點(diǎn) 數(shù)據(jù)庫(kù)數(shù)據(jù)的基本特點(diǎn)

    和管理的一項(xiàng)重要應(yīng)用,其優(yōu)點(diǎn)不僅可以提高工作效率,還可以保證數(shù)據(jù)的安全性和可靠性。本文將詳細(xì)介紹數(shù)據(jù)庫(kù)應(yīng)用及其特點(diǎn),同時(shí)探討數(shù)據(jù)庫(kù)數(shù)據(jù)的基本特點(diǎn)。 一、
    的頭像 發(fā)表于 08-28 17:22 ?3322次閱讀

    數(shù)據(jù)庫(kù)優(yōu)化那些事

    我們出去面試經(jīng)常會(huì)被問(wèn)到數(shù)據(jù)庫(kù)這一塊,而涉及數(shù)據(jù)庫(kù)這一塊問(wèn)的最多的就是數(shù)據(jù)庫(kù)優(yōu)化。那么我們?cè)趺醋霾拍茏龊?b class='flag-5'>優(yōu)化問(wèn)題呢?今天我們就來(lái)聊聊
    的頭像 發(fā)表于 10-08 11:49 ?971次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>優(yōu)化</b>那些事