MySQL 基本概念說(shuō)明-mage

數(shù)據(jù)存儲(chǔ)的基本概念

傳統(tǒng)的存儲(chǔ)數(shù)據(jù)方式,是把數(shù)據(jù)放到一個(gè)文件中,存放在磁盤(pán)上。當(dāng)程序要用時(shí),cpu會(huì)把數(shù)據(jù)加載到內(nèi)核內(nèi)存,然后內(nèi)核內(nèi)存將數(shù)據(jù)復(fù)制到程序內(nèi)存。程序進(jìn)行調(diào)用
當(dāng)數(shù)據(jù)文件很大時(shí),幾百個(gè)G。此時(shí)硬件資源不足以支持調(diào)用整個(gè)數(shù)據(jù)文件。而且我們的程序可能就調(diào)用整個(gè)數(shù)據(jù)中的一行數(shù)據(jù)。此時(shí)我們就需要一個(gè)特定的數(shù)據(jù)存儲(chǔ)系統(tǒng),才幫助我們的應(yīng)用程序來(lái)取得它調(diào)用的一條數(shù)據(jù)。即數(shù)據(jù)存儲(chǔ)系統(tǒng)

MySQL 結(jié)構(gòu)

MySQL是一個(gè)關(guān)系型的數(shù)據(jù)存儲(chǔ)系統(tǒng)。主要存儲(chǔ)關(guān)系型數(shù)據(jù),有主鍵,外鍵,唯一鍵的約束,有事務(wù)
MySQL是一整套的系統(tǒng)。需要給前端提供一個(gè)socket遠(yuǎn)程連接的端口,
當(dāng)要存儲(chǔ)或者查詢(xún)數(shù)據(jù)時(shí),它需要給外界提供一個(gè)接口。供其查詢(xún)和修改,即就是SQL語(yǔ)句。MySQL的數(shù)據(jù)也要以文件的方式存儲(chǔ)在磁盤(pán)上,它需要個(gè)中間件。即把磁盤(pán)上的文件可以以最快和最節(jié)省資源,最優(yōu)的方式提供給前端程序。也要把前端程序,要存儲(chǔ)的數(shù)據(jù),存儲(chǔ)到磁盤(pán)上。因此,此中間件稱(chēng)為存儲(chǔ)引擎

MySQL-basic.png
  • Socket: 提供遠(yuǎn)程連接

  • SQL語(yǔ)句查詢(xún)接口: 跟linux的bash差不多,它是一個(gè)解釋器來(lái)識(shí)別我們輸入的SQL語(yǔ)句,是否符合語(yǔ)法,并調(diào)用MySQL的函數(shù)來(lái)進(jìn)行執(zhí)行。如果寫(xiě)了一堆SQL語(yǔ)句,MySQL稱(chēng)為存儲(chǔ)過(guò)程。而在bash中稱(chēng)為腳本

  • 存儲(chǔ)引擎: 相當(dāng)于中間件,把程序要存儲(chǔ)的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,并寫(xiě)到磁盤(pán)上。把磁盤(pán)上的數(shù)據(jù),進(jìn)行轉(zhuǎn)換展示給前端程序

MySQL 如何工作

如果MySQL中存在大量數(shù)據(jù),如何高效的提供服務(wù)?
MySQL采用索引方式來(lái)提供服務(wù)。索引就是,把MySQL中的每一行數(shù)據(jù),提取一部分,單獨(dú)的放到一張表中。當(dāng)程序查詢(xún)時(shí),首先查詢(xún)索引。找到索引,然后去找對(duì)應(yīng)的數(shù)據(jù)。幾次查詢(xún)即可找到數(shù)據(jù)。無(wú)需遍歷整個(gè)表。它采用的是Btree數(shù)索引,一般會(huì)有2次索引頭遍歷。根據(jù)實(shí)際情況去。索引上面再加索引

image.png

MySQL索引相當(dāng)于字典前面的筆畫(huà)查詢(xún)
優(yōu)點(diǎn): 能夠加速查詢(xún),增加查詢(xún)效率
缺點(diǎn):每進(jìn)行數(shù)據(jù)的一次修改,就相當(dāng)于修改了索引和數(shù)據(jù)兩塊區(qū)域。即增加了IO,MySQL索引是按照順序排序。如果修改的數(shù)據(jù),打亂了索引的順序,還需要對(duì)索引進(jìn)行重新排序

如果數(shù)據(jù)量龐大,我們還要對(duì)數(shù)據(jù)庫(kù)進(jìn)行垂直分庫(kù)和水平分表
因?yàn)镸ySQL是關(guān)系型數(shù)據(jù)庫(kù),有主鍵,外鍵,唯一鍵等各種約束。如果插入一條數(shù)據(jù),MySQL首先會(huì)進(jìn)行查詢(xún)??床迦氲臄?shù)據(jù),存不存在主鍵沖突,如果不存在則插入。相對(duì)應(yīng)的修改和刪除也是如此。從廣義來(lái)說(shuō),無(wú)論MySQL做
垂直分庫(kù): 拆分?jǐn)?shù)據(jù)庫(kù)實(shí)例,把一個(gè)實(shí)例上的多個(gè)數(shù)據(jù)庫(kù),分別部署到多個(gè)實(shí)例上
水平分表: 把一張大表,進(jìn)行分片(shards)。
一般水平分表后,數(shù)據(jù)庫(kù)前面會(huì)有一個(gè)路由機(jī)器,來(lái)調(diào)度前面的請(qǐng)求,進(jìn)行修改數(shù)據(jù)庫(kù)。如果查詢(xún)的話(huà),水平分片后表不會(huì)滿(mǎn)足。因?yàn)椴樵?xún)會(huì)查詢(xún)每一個(gè)分片,然后對(duì)每一個(gè)分片查詢(xún)的結(jié)果再次進(jìn)行聚合查詢(xún)。非常浪費(fèi)性能和時(shí)間。一般此時(shí),系統(tǒng)中會(huì)有專(zhuān)門(mén)的大數(shù)據(jù)系統(tǒng)來(lái)處理查詢(xún)操作。
水平分表,一般是前端路由器,跟據(jù)某一個(gè)字段,對(duì)分片的數(shù)量進(jìn)行hash計(jì)算,然后確定在哪一個(gè)分片上進(jìn)行修改操作。水平分表,是直接把表的數(shù)據(jù),進(jìn)行分片。插入不是按照后端服務(wù)器的數(shù)量進(jìn)行hash計(jì)算取模,因?yàn)楹蠖朔?wù)器的數(shù)量的增加和修改,都會(huì)直接造hash 取模的結(jié)果不一樣,從而要重新進(jìn)行數(shù)據(jù)分布。所以直接按照分片數(shù)量進(jìn)行取模,當(dāng)增加或者減少后端數(shù)據(jù)庫(kù)服務(wù)器時(shí),只需要?jiǎng)討B(tài)把分片復(fù)制到相對(duì)應(yīng)的服務(wù)器上即可(即就是排干模式)。冗余的話(huà),也是對(duì)分片進(jìn)行冗余。此功能MySQL需要借助第三方插件完成,而NoSQL則原生支持

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 序言 后面有大量類(lèi)似于mysql的sum, group by查詢(xún)elk=== elk總體架構(gòu) https://ww...
    Hqmm閱讀 62,484評(píng)論 2 27
  • 一、基本概念 1.主鍵、外鍵、超鍵、候選鍵 超鍵:在關(guān)系中能唯一標(biāo)識(shí)元組的屬性集稱(chēng)為關(guān)系模式的超鍵。一個(gè)屬性可以為...
    仁安天下閱讀 214評(píng)論 0 1
  • 1 簡(jiǎn)介 Druid是針對(duì)時(shí)間序列數(shù)據(jù)提供低延時(shí)的數(shù)據(jù)寫(xiě)入以及快速交互式查詢(xún)的分布式OLAP數(shù)據(jù)庫(kù)。分布式OLAP...
    LZhan閱讀 815評(píng)論 0 0
  • Elasticsearch是一個(gè)開(kāi)源搜索引擎,功能強(qiáng)大,可以進(jìn)行分布式的實(shí)時(shí)文件存儲(chǔ),每個(gè)字段都被索引并可被搜索,...
    洛奇lodge閱讀 168評(píng)論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂(lè)有人憂(yōu)愁,有人驚喜有人失落,有的覺(jué)得收獲滿(mǎn)滿(mǎn)有...
    陌忘宇閱讀 8,831評(píng)論 28 54

友情鏈接更多精彩內(nèi)容