成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

mysql分區(qū)怎么實現(xiàn) mysql分區(qū)的數(shù)據(jù)類型

mysql分表,分區(qū)的區(qū)別和聯(lián)系

什么是分表,從表面意思上看呢,就是把一張表分成N多個小表,具體請看mysql分表的3種方法

創(chuàng)新互聯(lián)建站主要從事網(wǎng)站設(shè)計制作、做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)礦區(qū),十余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

什么是分區(qū),分區(qū)呢就是把一張表的數(shù)據(jù)分成N多個區(qū)塊,這些區(qū)塊可以在同一個磁盤上,也可以在不同的磁盤上,具體請參考mysql分區(qū)功能詳細(xì)介紹,以及實例

二,mysql分表和分區(qū)有什么區(qū)別呢

1,實現(xiàn)方式上

a),mysql的分表是真正的分表,一張表分成很多表后,每一個小表都是完正的一張表,都對應(yīng)三個文件,一個.MYD數(shù)據(jù)文件,.MYI索引文件,.frm表結(jié)構(gòu)文件。

Sql代碼

[root@BlackGhost test]# ls |grep user

alluser.MRG

alluser.frm

user1.MYD

user1.MYI

user1.frm

user2.MYD

user2.MYI

user2.frm

簡單說明一下,上面的分表呢是利用了merge存儲引擎(分表的一種),alluser是總表,下面有二個分表,user1,user2。他們二個都是獨立的表,取數(shù)據(jù)的時候,我們可以通過總表來取。這里總表是沒有.MYD,.MYI這二個文件的,也就是說,總表他不是一張表,沒有數(shù)據(jù),數(shù)據(jù)都放在分表里面。我們來看看.MRG到底是什么東西

Sql代碼

[root@BlackGhost test]# cat alluser.MRG |more

user1

user2

#INSERT_METHOD=LAST

從上面我們可以看出,alluser.MRG里面就存了一些分表的關(guān)系,以及插入數(shù)據(jù)的方式??梢园芽偙砝斫獬梢粋€外殼,或者是聯(lián)接池。

b),分區(qū)不一樣,一張大表進(jìn)行分區(qū)后,他還是一張表,不會變成二張表,但是他存放數(shù)據(jù)的區(qū)塊變多了。

Sql代碼

[root@BlackGhost test]# ls |grep aa

aa#P#p1.MYD

aa#P#p1.MYI

aa#P#p3.MYD

aa#P#p3.MYI

aa.frm

aa.par

從上面我們可以看出,aa這張表,分為二個區(qū),p1和p3,本來是三個區(qū),被我刪了一個區(qū)。我們都知道一張表對應(yīng)三個文件.MYD,.MYI,.frm。分區(qū)呢根據(jù)一定的規(guī)則把數(shù)據(jù)文件和索引文件進(jìn)行了分割,還多出了一個.par文件,打開.par文件后你可以看出他記錄了,這張表的分區(qū)信息,根分表中的.MRG有點像。分區(qū)后,還是一張,而不是多張表。

mysql 分區(qū)指定分區(qū)表數(shù)據(jù)存儲路徑,可以支持跨磁盤

INNODB引擎只支持DATA DIRECTORY,不支持INDEX DIRECTORY, 另外 目錄要空目錄權(quán)限歸屬mysql 組mysql 用戶,命令

mkdir /data

chown mysql:mysql /data

主鍵必須包含分區(qū)字段,PRIMARY KEY (id,store_id)

CREATE TABLE orders_list2 (

id INT AUTO_INCREMENT,

customer_surname VARCHAR(30),

store_id INT,

salesperson_id INT,

order_date DATE,

note VARCHAR(500),

PRIMARY KEY (id,store_id),

INDEX idx (id)

) ENGINE = INNODB

PARTITION BY LIST(store_id) (

PARTITION p1

VALUES IN (1, 3, 4, 17)

DATA DIRECTORY = '/data/p1',

PARTITION p2

VALUES IN (2, 12, 14)

DATA DIRECTORY = '/data/p2',

PARTITION p3

VALUES IN (6, 8, 20)

DATA DIRECTORY = '/data/p3',

PARTITION p4

VALUES IN (5, 7, 9, 11, 16)

DATA DIRECTORY = '/data/p4',

PARTITION p5

VALUES IN (10, 13, 15, 18)

DATA DIRECTORY = '/data/p5'

);

分區(qū)表擴(kuò)充

ALTER TABLE orders_list2? ADD PARTITION (PARTITION p6 VALUES IN? (21,22,23)

DATA DIRECTORY = '/var/lib/mysql/monitor/orders/p6'? ;

子分區(qū)

CREATE TABLE tb_sub_dir (id INT, purchased DATE)

ENGINE='MYISAM'

PARTITION BY RANGE( YEAR(purchased) )

SUBPARTITION BY HASH( TO_DAYS(purchased) ) (

? ? PARTITION p0 VALUES LESS THAN (1990)?

? ? (

? ? ? ? SUBPARTITION s0

? ? ? ? ? ? DATA DIRECTORY = '/data/data_sub1'

? ? ? ? ? ? INDEX DIRECTORY = '/data/idx_sub1',

? ? ? ? SUBPARTITION s1

? ? ? ? ? ? DATA DIRECTORY = '/data/data_sub1'

? ? ? ? ? ? INDEX DIRECTORY = '/data/idx_sub1'

? ? ),

? ? PARTITION p1 VALUES LESS THAN (2000)?

? ? (

? ? ? ? SUBPARTITION s2

? ? ? ? ? ? DATA DIRECTORY = '/data/data_sub2'

? ? ? ? ? ? INDEX DIRECTORY = '/data/idx_sub2',

? ? ? ? SUBPARTITION s3

? ? ? ? ? ? DATA DIRECTORY = '/data/data_sub2'

? ? ? ? ? ? INDEX DIRECTORY = '/data/idx_sub2'

? ? ),

? ? PARTITION p2 VALUES LESS THAN MAXVALUE?

? ? (

? ? ? ? SUBPARTITION s4

? ? ? ? ? ? DATA DIRECTORY = '/data/data_sub3'

? ? ? ? ? ? INDEX DIRECTORY = '/data/idx_sub3',

? ? ? ? SUBPARTITION s5

? ? ? ? ? ? DATA DIRECTORY = '/data/data_sub3'

? ? ? ? ? ? INDEX DIRECTORY = '/data/idx_sub3'

? ? )

);

日期字段區(qū)分

CREATE TABLE employees1 (

id INT NOT NULL,

fname VARCHAR(30),

lname VARCHAR(30),

hired DATE NOT NULL DEFAULT '1970-01-01',

separated DATE NOT NULL DEFAULT '9999-12-31',

job_code INT,

store_id INT

)

PARTITION BY RANGE ( YEAR(separated) ) (

PARTITION p0 VALUES LESS THAN (1991),

PARTITION p1 VALUES LESS THAN (1996),

PARTITION p2 VALUES LESS THAN (2001),

PARTITION p3 VALUES LESS THAN MAXVALUE

);

PHP mysql 實現(xiàn)hash分區(qū)的問題

當(dāng)分片索引不是純整型的字符串時,只接受整型的內(nèi)置 hash 算法是無法使用的。為此,stringhash 按照用戶定義的起點和終點去截取分片索引字段中的部分字符,根據(jù)當(dāng)中每個字符的二進(jìn)制 unicode 值換算出一個長整型數(shù)值,然后就直接調(diào)用內(nèi)置 hash 算法求解分片路由:先求模得到邏輯分片號,再根據(jù)邏輯分片號直接映射到物理分片。

用戶需要在 rule.xml 中定義 partitionLength[] 和 partitionCount[] 兩個數(shù)組和 hashSlice 二元組。

在 DBLE 的啟動階段,點乘兩個數(shù)組得到模數(shù),也是邏輯分片的數(shù)量

并且根據(jù)兩個數(shù)組的叉乘,得到各個邏輯分片到物理分片的映射表(物理分片數(shù)量由 partitionCount[] 數(shù)組的元素值之和)

此外根據(jù) hashSlice 二元組,約定把分片索引值中的第 4 字符到第 5 字符(字符串以 0 開始編號,編號 3 到編號 4 等于第 4 字符到第 5 字符)字符串用于 “字符串-整型”的轉(zhuǎn)換

在 DBLE 的運行過程中,用戶訪問使用這個算法的表時,WHERE 子句中的分片索引值會被提取出來,取當(dāng)中的第 4 個字符到第 5 字符,送入下一步

設(shè)置一個初始值為 0 的累計值,逐個取字符,把累計值乘以 31,再把這個字符的 unicode 值當(dāng)成長整型加入到累計值中,如此類推直至處理完截取出來的所有字符,此時的累計值就能夠代表用戶的分片索引值,完成了 “字符串-整型” 的轉(zhuǎn)換

對上一步的累計值進(jìn)行求模,得到邏輯分片號

再根據(jù)邏輯分片號,查映射表,直接得到物理分片號

與MyCat的類似分片算法對比

請點擊輸入圖片描述

兩種算法在string轉(zhuǎn)化為int之后,和 hash 分區(qū)算法相同,區(qū)別也繼承了 hash 算法的區(qū)別。

開發(fā)注意點

【分片索引】1. 必須是字符串

【分片索引】2. 最大物理分片配置方法是,讓 partitionCount[] 數(shù)組和等于 2880

例如:

property name="partitionLength"1/propertyproperty name="partitionCount"2880/property

property name="partitionLength"1,1/propertyproperty name="partitionCount"1440,1440/property

【分片索引】3. 最小物理分片配置方法是,讓 partitionCount[] 數(shù)組和等于 1

例如

property name="partitionLength"2880/propertyproperty name="partitionCount"1/property

【分片索引】4. partitionLength 和 partitionCount 被當(dāng)做兩個逗號分隔的一維數(shù)組,它們之間的點乘必須在 [1, 2880] 范圍內(nèi)

【分片索引】5. partitionLength 和 partitionCount 的配置對順序敏感

property name="partitionLength"512,256/propertyproperty name="partitionCount"1,2/property

property name="partitionLength"256,512/propertyproperty name="partitionCount"2,1/property

是不同的分片結(jié)果

【分片索引】6. 分片索引字段長度小于用戶指定的截取長度時,截取長度會安全減少到符合分片索引字段長度

【數(shù)據(jù)分布】1. 分片索引字段截取越長則越有利于數(shù)據(jù)均勻分布

【數(shù)據(jù)分布】2. 分片索引字段的內(nèi)容重復(fù)率越低則越有利于數(shù)據(jù)均勻分布

運維注意點

【擴(kuò)容】1. 預(yù)先過量分片,并且不改變 partitionCount 和 partitionLength 點乘結(jié)果,也不改變截取設(shè)置 hashSlice 時,可以避免數(shù)據(jù)再平衡,只需進(jìn)行涉及數(shù)據(jù)的遷移

【擴(kuò)容】2. 若需要改變 partitionCount 和 partitionLength 點乘結(jié)果或改變截取設(shè)置 hashSlice 時,需要數(shù)據(jù)再平衡

【縮容】1. 預(yù)先過量分片,并且不改變 partitionCount 和 partitionLength 點乘結(jié)果,也不改變截取設(shè)置 hashSlice 時,可以避免數(shù)據(jù)再平衡,只需進(jìn)行涉及數(shù)據(jù)的遷移

【縮容】2. 若需要改變 partitionCount 和 partitionLength 點乘結(jié)果或改變截取設(shè)置 hashSlice 時,需要數(shù)據(jù)再平衡

配置注意點

【配置項】1. 在 rule.xml 中,可配置項為?property name="partitionLength"? 、property name="partitionCount" 和 property name="hashSlice"

【配置項】2.在 rule.xml 中配置 property name="partitionLength"?標(biāo)簽

內(nèi)容形式為:物理分片持有的虛擬分片數(shù)[,物理分片持有的虛擬分片數(shù),...物理分片持有的虛擬分片數(shù)]

物理分片持有的虛擬分片數(shù)必須是整型,物理分片持有的虛擬分片數(shù)從左到右與同順序的物理分片數(shù)對應(yīng),partitionLength 和partitionCount 的點乘結(jié)果必須在 [1, 2880] 范圍內(nèi)

【配置項】3. 在 rule.xml 中配置 property name="partitionCount"?標(biāo)簽

內(nèi)容形式為:物理分片數(shù)[,物理分片數(shù),...物理分片數(shù)]

其中物理分片數(shù)必須是整型,物理分片數(shù)按從左到右的順序與同順序的物理分片持有的虛擬分片數(shù)對應(yīng),物理分片的編號從左到右連續(xù)遞進(jìn),partitionLength 和 partitionCount 的點乘結(jié)果必須在 [1, 2880] 范圍內(nèi)

【配置項】4. partitionLength 和 partitionCount 的語義是:持有partitionLength[i] 個虛擬分片的物理分片有 partitionCount[i] 個

例如

property name="partitionLength"512,256/propertyproperty name="partitionCount"1,2/property

語義是持有 512 個邏輯分片的物理分片有 1 個,緊隨其后,持有 256 個邏輯分片的物理分片有 2 個

【配置項】5.partitionLength 和 partitionCount 都對書寫順序敏感,

例如

property name="partitionLength"512,256/propertyproperty name="partitionCount"1,2/property

分片結(jié)果是第一個物理分片持有頭512個邏輯分片,第二個物理分片持有緊接著的256個邏輯分片,第三個物理分片持有最后256個邏輯分片,相對的

property name="partitionLength"256,512/propertyproperty name="partitionCount"2,1/property

分片結(jié)果則是第一個物理分片持有頭 256 個邏輯分片,第二個物理分片持有緊接著的 256 個邏輯分片,第三個物理分片持有最后 512 個邏輯分片

【配置項】6.partitionLength[] 的元素全部為 1 時,這時候partitionCount 數(shù)組和等于 partitionLength 和 partitionCount 的點乘,物理分片和邏輯分片就會一一對應(yīng),該分片算法等效于直接取余

【配置項】7.在 rule.xml 中配置標(biāo)簽,從分片索引字段的第幾個字符開始截取到第幾個字符:

若希望從首字符開始截取 k 個字符( k 為正整數(shù)),配置的內(nèi)容形式可以為“ 0 : k ”、“ k ”或“ : k ”;

若希望從末字符開始截取 k 個字符( k 為正整數(shù)),則配置的內(nèi)容形式可以為“ -k : 0 ”、“ -k ”或“ -k : ”;

若希望從頭第 m 個字符起算截取 n 個字符( m 和 n 都是正整數(shù)),則先計算出 i = m - 1 和 j = i + n - 1,配置的內(nèi)容形式為“ i : j ”;

若希望從尾第 m 個字符起算截取從尾算起的 n 個字符( m 和 n 都是正整數(shù)),則先計算出 i = -m + n - 1,配置的內(nèi)容形式可以為“ -m : i ”;

若希望不截取,則配置的內(nèi)容形式可以為“ 0 : 0 ”、“ 0 : ”、“ : 0 ”或 “ : ”

mysql分區(qū)表如何實現(xiàn)類似全文索引的效果

1.添加PRIMARY KEY(主鍵索引)

mysqlALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

2.添加UNIQUE(唯一索引)

mysqlALTER TABLE `table_name` ADD UNIQUE (

`column`

)

3.添加INDEX(普通索引)

mysqlALTER TABLE `table_name` ADD INDEX index_name ( `column` )

4.添加FULLTEXT(全文索引)

mysqlALTER TABLE `table_name` ADD FULLTEXT ( `column`)

5.添加多列索引

mysqlALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

本文標(biāo)題:mysql分區(qū)怎么實現(xiàn) mysql分區(qū)的數(shù)據(jù)類型
瀏覽路徑:http://jinyejixie.com/article6/dopsiig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站策劃、App開發(fā)、企業(yè)建站、網(wǎng)站制作做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
湖南省| 来安县| 莱西市| 丰都县| 游戏| 分宜县| 南充市| 成都市| 搜索| 乌什县| 革吉县| 凉山| 梅河口市| 日照市| 克东县| 延庆县| 陇川县| 石棉县| 修水县| 成都市| 古交市| 旬阳县| 万年县| 黄陵县| 清河县| 孝昌县| 成安县| 蛟河市| 颍上县| 会同县| 永川市| 冷水江市| 台北县| 虹口区| 武平县| 郁南县| 渝中区| 略阳县| 隆子县| 简阳市| 中牟县|