成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一分鐘掌握數據庫垂直拆分

開發 開發工具
今天來講一講如何快速的掌握數據庫垂直拆分。

一、緣起

當數據庫的數據量非常大時,水平切分和垂直拆分是兩種常見的降低數據庫大小,提升性能的方法。假設有用戶表:

user(

uid bigint,

name varchar(16),

pass varchar(16),

age int,

sex tinyint,

flag tinyint,

sign varchar(64),

intro varchar(256)

…);

水平切分是指,以某個字段為依據(例如uid),按照一定規則(例如取模),將一個庫(表)上的數據拆分到多個庫(表)上,以降低單庫(表)大小,達到提升性能的目的的方法,水平切分后,各個庫(表)的特點是:

(1)每個庫(表)的結構都一樣

(2)每個庫(表)的數據都不一樣,沒有交集

(3)所有庫(表)的并集是全量數據

數據庫

二、什么是垂直拆分

垂直拆分是指,將一個屬性較多,一行數據較大的表,將不同的屬性拆分到不同的表中,以降低單庫(表)大小,達到提升性能的目的的方法,垂直切分后,各個庫(表)的特點是:

(1)每個庫(表)的結構都不一樣

(2)一般來說,每個庫(表)的屬性至少有一列交集,一般是主鍵

(3)所有庫(表)的并集是全量數據

還是以上文提到的用戶表為例,如果要垂直拆分,可能拆分結果會是這樣的:

user_base(

uid bigint,

name varchar(16),

pass varchar(16),

age int,

sex tinyint,

flag tinyint,

…);

user_ext(

uid bigint,

sign varchar(64),

intro varchar(256)

…);

三、垂直切分的依據是什么

當一個表屬性很多時,如何來進行垂直拆分呢?如果沒有特殊情況,拆分依據主要有幾點:

(1)將長度較短,訪問頻率較高的屬性盡量放在一個表里,這個表暫且稱為主表

(2)將字段較長,訪問頻率較低的屬性盡量放在一個表里,這個表暫且稱為擴展表

如果1和2都滿足,還可以考慮第三點:

(3)經常一起訪問的屬性,也可以放在一個表里

優先考慮1和2,第3點不是必須。另,如果實在屬性過多,主表和擴展表都可以有多個。

一般來說,數據量并發量比較大時,數據庫的上層都會有一個服務層。需要注意的是,當應用方需要同時訪問主表和擴展表中的屬性時,服務層不要使用join來連表訪問,而應該分兩次進行查詢:

同時訪問主表和擴展表中的屬性時,應該分兩次進行查詢

原因是,大數據高并發互聯網場景下,一般來說,吞吐量和擴展性是主要矛盾:

(1)join更消損耗數據庫性能

(2)join會讓base表和ext表耦合在一起(必須在一個數據庫實例上),不利于數據量大時拆分到不同的數據庫實例上(機器上)。畢竟減少數據量,提升性能才是垂直拆分的初衷。

四、為什么要這么這么拆分

為何要將字段短,訪問頻率高的屬性放到一個表內?為何這么垂直拆分可以提升性能?因為:

(1)數據庫有自己的內存buffer,會將磁盤上的數據load到內存buffer里(暫且理解為進程內緩存吧)

(2)內存buffer緩存數據是以row為單位的

(3)在內存有限的情況下,在數據庫內存buffer里緩存短row,就能緩存更多的數據

(4)在數據庫內存buffer里緩存訪問頻率高的row,就能提升緩存***率,減少磁盤的訪問

舉個例子就很好理解了:

假設數據庫內存buffer為1G,未拆分的user表1行數據大小為1k,那么只能緩存100w行數據。

如果垂直拆分成user_base和user_ext,其中:

(1)user_base訪問頻率高(例如uid, name, passwd, 以及一些flag等),一行大小為0.1k

(2)user_ext訪問頻率低(例如簽名, 個人介紹等),一行大小為0.9k

那邊內存buffer就就能緩存近乎1000w行user_base的記錄,訪問磁盤的概率會大大降低,數據庫訪問的時延會大大降低,吞吐量會大大增加。

五、總結

(1)水平拆分和垂直拆分都是降低數據量大小,提升數據庫性能的常見手段

(2)流量大,數據量大時,數據訪問要有service層,并且service層不要通過join來獲取主表和擴展表的屬性

(3)垂直拆分的依據,盡量把長度較短,訪問頻率較高的屬性放在主表里

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

責任編輯:趙寧寧 來源: 架構師之路
相關推薦

2017-03-30 19:28:26

HBase分布式數據

2023-03-27 09:40:01

GoWebAssembl集成

2017-03-27 23:22:23

數據庫列式存儲

2018-06-26 05:23:19

線程安全函數代碼

2017-07-06 08:12:02

索引查詢SQL

2022-07-18 06:16:07

單點登錄系統

2020-05-21 19:46:19

區塊鏈數字貨幣比特幣

2009-11-25 09:33:27

Cisco路由器密碼設

2017-02-21 13:00:27

LoadAverage負載Load

2018-07-31 16:10:51

Redo Undo數據庫數據

2011-04-19 09:27:25

Spring

2011-02-21 17:48:35

vsFTPd

2018-12-12 22:51:24

Java包裝語言

2020-07-17 07:44:25

云計算邊緣計算IT

2016-09-12 17:28:45

云存儲應用軟件存儲設備

2020-07-09 07:37:06

數據庫Redis工具

2020-06-11 08:04:12

WDMDWDMMWDM

2013-11-15 07:24:50

4G LTE圖解

2015-11-12 10:32:40

GitHub控制系統分布式

2016-12-16 11:05:00

分布式互斥線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 国产精品一区二区无线 | 欧美日韩在线高清 | 日韩欧美福利视频 | 免费毛片在线 | 综合久久综合久久 | 日韩精品久久一区二区三区 | 羞羞视频在线网站观看 | 91婷婷韩国欧美一区二区 | 日韩av在线一区二区 | 91色综合| 日韩欧美高清dvd碟片 | 黄色毛片黄色毛片 | 日本久久精品视频 | 国产成人久久av免费高清密臂 | 欧美日韩精品免费观看 | 日日摸夜夜添夜夜添精品视频 | 成人国产精品视频 | 午夜电影网站 | 神马久久久久久久久久 | 亚洲成人一区 | 国产日韩精品视频 | 欧美日韩中文字幕 | 天天看天天操 | 国产精品色 | 波多野吉衣久久 | 久久青青 | 亚洲欧美一区二区三区国产精品 | 一区亚洲| 精品国产91乱码一区二区三区 | 欧美日韩国产一区二区三区 | 巨大黑人极品videos精品 | 久久网一区二区三区 | 亚洲高清视频在线观看 | 国产精品欧美一区二区 | 色播久久 | 91文字幕巨乱亚洲香蕉 | 91精品一区二区三区久久久久久 | 国产精品18hdxxxⅹ在线 | 精品自拍视频在线观看 | 波多野结衣av中文字幕 |