真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql怎么去分片 mysql的分片和分區(qū)

mysql怎么啟動hash分區(qū)表

基于給定的分區(qū)個(gè)數(shù),將數(shù)據(jù)分配到不同的分區(qū),HASH分區(qū)只能針對整數(shù)進(jìn)行HASH,對于非整形的字段只能通過表達(dá)式將其轉(zhuǎn)換成整數(shù)。

坡頭ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

表達(dá)式可以是mysql中任意有效的函數(shù)或者表達(dá)式,對于非整形的HASH往表插入數(shù)據(jù)的過程中會多一步表達(dá)式的計(jì)算操作,所以不建議使用復(fù)雜的表達(dá)式這樣會影響性能。

MYSQL支持兩種HASH分區(qū),常規(guī)HASH(HASH)和線性HASH(LINEAR HASH) 。

mysql 什么時(shí)候分區(qū) 什么時(shí)候分表

一,什么是mysql分表,分區(qū)

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

什么是分區(qū),分區(qū)呢就是把一張表的數(shù)據(jù)分成N多個(gè)區(qū)塊,這些區(qū)塊可以在同一個(gè)磁盤上,也可以在不同的磁盤上

一,先說一下為什么要分表

當(dāng)一張的數(shù)據(jù)達(dá)到幾百萬時(shí),你查詢一次所花的時(shí)間會變多,如果有聯(lián)合查詢的話,我想有可能會死在那兒了。分表的目的就在于此,減小數(shù)據(jù)庫的負(fù)擔(dān),縮短查詢時(shí)間。

根據(jù)個(gè)人經(jīng)驗(yàn),mysql執(zhí)行一個(gè)sql的過程如下:

1,接收到sql;2,把sql放到排隊(duì)隊(duì)列中 ;3,執(zhí)行sql;4,返回執(zhí)行結(jié)果。在這個(gè)執(zhí)行過程中最花時(shí)間在什么地方呢?第一,是排隊(duì)等待的時(shí)間,第二,sql的執(zhí)行時(shí)間。其實(shí)這二個(gè)是一回事,等待的同時(shí),肯定有sql在執(zhí)行。所以我們要縮短sql的執(zhí)行時(shí)間。

mysql中有一種機(jī)制是表鎖定和行鎖定,為什么要出現(xiàn)這種機(jī)制,是為了保證數(shù)據(jù)的完整性,我舉個(gè)例子來說吧,如果有二個(gè)sql都要修改同一張表的同一條數(shù)據(jù),這個(gè)時(shí)候怎么辦呢,是不是二個(gè)sql都可以同時(shí)修改這條數(shù)據(jù)呢?很顯然mysql對這種情況的處理是,一種是表鎖定(myisam存儲引擎),一個(gè)是行鎖定(innodb存儲引擎)。表鎖定表示你們都不能對這張表進(jìn)行操作,必須等我對表操作完才行。行鎖定也一樣,別的sql必須等我對這條數(shù)據(jù)操作完了,才能對這條數(shù)據(jù)進(jìn)行操作。如果數(shù)據(jù)太多,一次執(zhí)行的時(shí)間太長,等待的時(shí)間就越長,這也是我們?yōu)槭裁匆直淼脑颉?/p>

二,分表

1,做mysql集群,例如:利用mysql cluster ,mysql proxy,mysql replication,drdb等等

有人會問mysql集群,根分表有什么關(guān)系嗎?雖然它不是實(shí)際意義上的分表,但是它啟到了分表的作用,做集群的意義是什么呢?為一個(gè)數(shù)據(jù)庫減輕負(fù)擔(dān),說白了就是減少sql排隊(duì)隊(duì)列中的sql的數(shù)量,舉個(gè)例子:有10個(gè)sql請求,如果放在一個(gè)數(shù)據(jù)庫服務(wù)器的排隊(duì)隊(duì)列中,他要等很長時(shí)間,如果把這10個(gè)sql請求,分配到5個(gè)數(shù)據(jù)庫服務(wù)器的排隊(duì)隊(duì)列中,一個(gè)數(shù)據(jù)庫服務(wù)器的隊(duì)列中只有2個(gè),這樣等待時(shí)間是不是大大的縮短了呢?這已經(jīng)很明顯了。所以我把它列到了分表的范圍以內(nèi),我做過一些mysql的集群:

linux mysql proxy 的安裝,配置,以及讀寫分離

mysql replication 互為主從的安裝及配置,以及數(shù)據(jù)同步

優(yōu)點(diǎn):擴(kuò)展性好,沒有多個(gè)分表后的復(fù)雜操作(php代碼)

缺點(diǎn):單個(gè)表的數(shù)據(jù)量還是沒有變,一次操作所花的時(shí)間還是那么多,硬件開銷大。

2,預(yù)先估計(jì)會出現(xiàn)大數(shù)據(jù)量并且訪問頻繁的表,將其分為若干個(gè)表

這種預(yù)估大差不差的,論壇里面發(fā)表帖子的表,時(shí)間長了這張表肯定很大,幾十萬,幾百萬都有可能。 聊天室里面信息表,幾十個(gè)人在一起一聊一個(gè)晚上,時(shí)間長了,這張表的數(shù)據(jù)肯定很大。像這樣的情況很多。所以這種能預(yù)估出來的大數(shù)據(jù)量表,我們就事先分出個(gè)N個(gè)表,這個(gè)N是多少,根據(jù)實(shí)際情況而定。以聊天信息表為例:

我事先建100個(gè)這樣的表,message_00,message_01,message_02..........message_98,message_99.然后根據(jù)用戶的ID來判斷這個(gè)用戶的聊天信息放到哪張表里面,你可以用hash的方式來獲得,可以用求余的方式來獲得,方法很多,各人想各人的吧。下面用hash的方法來獲得表名:

查看復(fù)制打印?

?php

function get_hash_table($table,$userid) {

$str = crc32($userid);

if($str0){

$hash = "0".substr(abs($str), 0, 1);

}else{

$hash = substr($str, 0, 2);

}

return $table."_".$hash;

}

echo get_hash_table('message','user18991'); //結(jié)果為message_10

echo get_hash_table('message','user34523'); //結(jié)果為message_13

?

說明一下,上面的這個(gè)方法,告訴我們user18991這個(gè)用戶的消息都記錄在message_10這張表里,user34523這個(gè)用戶的消息都記錄在message_13這張表里,讀取的時(shí)候,只要從各自的表中讀取就行了。

優(yōu)點(diǎn):避免一張表出現(xiàn)幾百萬條數(shù)據(jù),縮短了一條sql的執(zhí)行時(shí)間

缺點(diǎn):當(dāng)一種規(guī)則確定時(shí),打破這條規(guī)則會很麻煩,上面的例子中我用的hash算法是crc32,如果我現(xiàn)在不想用這個(gè)算法了,改用md5后,會使同一個(gè)用戶的消息被存儲到不同的表中,這樣數(shù)據(jù)亂套了。擴(kuò)展性很差。

3,利用merge存儲引擎來實(shí)現(xiàn)分表

我覺得這種方法比較適合,那些沒有事先考慮,而已經(jīng)出現(xiàn)了得,數(shù)據(jù)查詢慢的情況。這個(gè)時(shí)候如果要把已有的大數(shù)據(jù)量表分開比較痛苦,最痛苦的事就是改代碼,因?yàn)槌绦蚶锩娴膕ql語句已經(jīng)寫好了,現(xiàn)在一張表要分成幾十張表,甚至上百張表,這樣sql語句是不是要重寫呢?舉個(gè)例子,我很喜歡舉子

mysqlshow engines;的時(shí)候你會發(fā)現(xiàn)mrg_myisam其實(shí)就是merge。

查看復(fù)制打印?

mysql CREATE TABLE IF NOT EXISTS `user1` (

- `id` int(11) NOT NULL AUTO_INCREMENT,

- `name` varchar(50) DEFAULT NULL,

- `sex` int(1) NOT NULL DEFAULT '0',

- PRIMARY KEY (`id`)

- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Query OK, 0 rows affected (0.05 sec)

mysql CREATE TABLE IF NOT EXISTS `user2` (

- `id` int(11) NOT NULL AUTO_INCREMENT,

- `name` varchar(50) DEFAULT NULL,

- `sex` int(1) NOT NULL DEFAULT '0',

- PRIMARY KEY (`id`)

- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Query OK, 0 rows affected (0.01 sec)

mysql INSERT INTO `user1` (`name`, `sex`) VALUES('張映', 0);

Query OK, 1 row affected (0.00 sec)

mysql INSERT INTO `user2` (`name`, `sex`) VALUES('tank', 1);

Query OK, 1 row affected (0.00 sec)

mysql CREATE TABLE IF NOT EXISTS `alluser` (

- `id` int(11) NOT NULL AUTO_INCREMENT,

- `name` varchar(50) DEFAULT NULL,

- `sex` int(1) NOT NULL DEFAULT '0',

- INDEX(id)

- ) TYPE=MERGE UNION=(user1,user2) INSERT_METHOD=LAST AUTO_INCREMENT=1 ;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql select id,name,sex from alluser;

+----+--------+-----+

| id | name | sex |

+----+--------+-----+

| 1 | 張映 | 0 |

| 1 | tank | 1 |

+----+--------+-----+

2 rows in set (0.00 sec)

mysql INSERT INTO `alluser` (`name`, `sex`) VALUES('tank2', 0);

Query OK, 1 row affected (0.00 sec)

mysql select id,name,sex from user2

- ;

+----+-------+-----+

| id | name | sex |

+----+-------+-----+

| 1 | tank | 1 |

| 2 | tank2 | 0 |

+----+-------+-----+

2 rows in set (0.00 sec)

從上面的操作中,我不知道你有沒有發(fā)現(xiàn)點(diǎn)什么?假如我有一張用戶表user,有50W條數(shù)據(jù),現(xiàn)在要拆成二張表user1和user2,每張表25W條數(shù)據(jù),

INSERT INTO user1(user1.id,user1.name,user1.sex)SELECT (user.id,user.name,user.sex)FROM user where user.id = 250000

INSERT INTO user2(user2.id,user2.name,user2.sex)SELECT (user.id,user.name,user.sex)FROM user where user.id 250000

這樣我就成功的將一張user表,分成了二個(gè)表,這個(gè)時(shí)候有一個(gè)問題,代碼中的sql語句怎么辦,以前是一張表,現(xiàn)在變成二張表了,代碼改動很大,這樣給程序員帶來了很大的工作量,有沒有好的辦法解決這一點(diǎn)呢?辦法是把以前的user表備份一下,然后刪除掉,上面的操作中我建立了一個(gè)alluser表,只把這個(gè)alluser表的表名改成user就行了。但是,不是所有的mysql操作都能用的

a,如果你使用 alter table 來把 merge 表變?yōu)槠渌眍愋?,到底層表的映射就被丟失了。取而代之的,來自底層 myisam 表的行被復(fù)制到已更換的表中,該表隨后被指定新類型。

b,網(wǎng)上看到一些說replace不起作用,我試了一下可以起作用的。暈一個(gè)先

mysql UPDATE alluser SET sex=REPLACE(sex, 0, 1) where id=2;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql select * from alluser;

+----+--------+-----+

| id | name | sex |

+----+--------+-----+

| 1 | 張映 | 0 |

| 1 | tank | 1 |

| 2 | tank2 | 1 |

+----+--------+-----+

3 rows in set (0.00 sec)

c,一個(gè) merge 表不能在整個(gè)表上維持 unique 約束。當(dāng)你執(zhí)行一個(gè) insert,數(shù)據(jù)進(jìn)入第一個(gè)或者最后一個(gè) myisam 表(取決于 insert_method 選項(xiàng)的值)。mysql 確保唯一鍵值在那個(gè) myisam 表里保持唯一,但不是跨集合里所有的表。

d,當(dāng)你創(chuàng)建一個(gè) merge 表之時(shí),沒有檢查去確保底層表的存在以及有相同的機(jī)構(gòu)。當(dāng) merge 表被使用之時(shí),mysql 檢查每個(gè)被映射的表的記錄長度是否相等,但這并不十分可靠。如果你從不相似的 myisam 表創(chuàng)建一個(gè) merge 表,你非常有可能撞見奇怪的問題。

優(yōu)點(diǎn):擴(kuò)展性好,并且程序代碼改動的不是很大

缺點(diǎn):這種方法的效果比第二種要差一點(diǎn)

三,總結(jié)一下

上面提到的三種方法,我實(shí)際做過二種,第一種和第二種。第三種沒有做過,所以說的細(xì)一點(diǎn)。哈哈。做什么事都有一個(gè)度,超過個(gè)度就過變得很差,不能一味的做數(shù)據(jù)庫服務(wù)器集群,硬件是要花錢買的,也不要一味的分表,分出來1000表,mysql的存儲歸根到底還以文件的形勢存在硬盤上面,一張表對應(yīng)三個(gè)文件,1000個(gè)分表就是對應(yīng)3000個(gè)文件,這樣檢索起來也會變的很慢。我的建議是

方法1和方法2結(jié)合的方式來進(jìn)行分表

方法1和方法3結(jié)合的方式來進(jìn)行分表

我的二個(gè)建議適合不同的情況,根據(jù)個(gè)人情況而定,我覺得會有很多人選擇方法1和方法3結(jié)合的方式

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

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

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

[root@BlackGhost test]# ls |grep user

alluser.MRG

alluser.frm

user1.MYD

user1.MYI

user1.frm

user2.MYD

user2.MYI

user2.frm

Php代碼

[root@BlackGhost test]# ls |grep user

alluser.MRG

alluser.frm

user1.MYD

user1.MYI

user1.frm

user2.MYD

user2.MYI

user2.frm

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

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

user1

user2

#INSERT_METHOD=LAST

Php代碼

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

user1

user2

#INSERT_METHOD=LAST

從上面我們可以看出,alluser.MRG里面就存了一些分表的關(guān)系,以及插入數(shù)據(jù)的方式。可以把總表理解成一個(gè)外殼,或者是聯(lián)接池。

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

[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

Php代碼

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

2,數(shù)據(jù)處理上

a),分表后,數(shù)據(jù)都是存放在分表里,總表只是一個(gè)外殼,存取數(shù)據(jù)發(fā)生在一個(gè)一個(gè)的分表里面??聪旅娴睦樱?/p>

select * from alluser where id=’12′表面上看,是對表alluser進(jìn)行操作的,其實(shí)不是的。是對alluser里面的分表進(jìn)行了操作。

b),分區(qū)呢,不存在分表的概念,分區(qū)只不過把存放數(shù)據(jù)的文件分成了許多小塊,分區(qū)后的表呢,還是一張表。數(shù)據(jù)處理還是由自己來完成。

3,提高性能上

a),分表后,單表的并發(fā)能力提高了,磁盤I/O性能也提高了。并發(fā)能力為什么提高了呢,因?yàn)椴閷ひ淮嗡ǖ臅r(shí)間變短了,如果出現(xiàn)高并發(fā)的話,總表可以根據(jù)不同的查詢,將并發(fā)壓力分到不同的小表里面。磁盤I/O性能怎么搞高了呢,本來一個(gè)非常大的.MYD文件現(xiàn)在也分?jǐn)偟礁鱾€(gè)小表的.MYD中去了。

b),mysql提出了分區(qū)的概念,我覺得就想突破磁盤I/O瓶頸,想提高磁盤的讀寫能力,來增加mysql性能。

在這一點(diǎn)上,分區(qū)和分表的測重點(diǎn)不同,分表重點(diǎn)是存取數(shù)據(jù)時(shí),如何提高mysql并發(fā)能力上;而分區(qū)呢,如何突破磁盤的讀寫能力,從而達(dá)到提高mysql性能的目的。

4),實(shí)現(xiàn)的難易度上

a),分表的方法有很多,用merge來分表,是最簡單的一種方式。這種方式根分區(qū)難易度差不多,并且對程序代碼來說可以做到透明的。如果是用其他分表方式就比分區(qū)麻煩了。

b),分區(qū)實(shí)現(xiàn)是比較簡單的,建立分區(qū)表,根建平常的表沒什么區(qū)別,并且對開代碼端來說是透明的。

三,mysql分表和分區(qū)有什么聯(lián)系呢

1,都能提高mysql的性高,在高并發(fā)狀態(tài)下都有一個(gè)良好的表面。

2,分表和分區(qū)不矛盾,可以相互配合的,對于那些大訪問量,并且表數(shù)據(jù)比較多的表,我們可以采取分表和分區(qū)結(jié)合的方式(如果merge這種分表方式,不能和分區(qū)配合的話,可以用其他的分表試),訪問量不大,但是表數(shù)據(jù)很多的表,我們可以采取分區(qū)的方式等。

mysql分片,表關(guān)聯(lián)查詢的sql怎么寫

以每24小時(shí)作為一份時(shí)間(而非自然日),根據(jù)用戶的配置有兩種工作模式:帶狀模式中,用戶僅定義開始日期時(shí),從開始日期(含)開始,每份時(shí)間1個(gè)分片地?zé)o限增加下去;環(huán)狀模式中,用戶定義了開始日期和結(jié)束日期時(shí),以結(jié)束日期(含)和開始日期(含)之間的時(shí)間份數(shù)作為分片總數(shù)(分片數(shù)量固定),以類似取模的方式路由到這些分片里。

1. DBLE 啟動時(shí),讀取用戶在 rule.xml 配置的 sBeginDate 來確定起始時(shí)間

2. 讀取用戶在 rule.xml 配置的 sPartionDay 來確定每個(gè) MySQL 分片承載多少天內(nèi)的數(shù)據(jù)

3. 讀取用戶在 rule.xml 配置的 dateFormat 來確定分片索引的日期格式

4. 在 DBLE 的運(yùn)行過程中,用戶訪問使用這個(gè)算法的表時(shí),WHERE 子句中的分片索引值(字符串),會被提取出來嘗試轉(zhuǎn)換成 Java 內(nèi)部的時(shí)間類型

5. 然后求分片索引值與起始時(shí)間的差,除以 MySQL 分片承載的天數(shù),確定所屬分片

1. DBLE 啟動時(shí),讀取用戶在 rule.xml 配置的起始時(shí)間 sBeginDate、終止時(shí)間 sEndDate 和每個(gè) MySQL 分片承載多少天數(shù)據(jù) sPartionDay

2. 根據(jù)用戶設(shè)置,建立起以 sBeginDate 開始,每 sPartionDay 天一個(gè)分片,直到 sEndDate 為止的一個(gè)環(huán),把分片串聯(lián)串聯(lián)起來

3. 讀取用戶在 rule.xml 配置的 defaultNode

4. 在 DBLE 的運(yùn)行過程中,用戶訪問使用這個(gè)算法的表時(shí),WHERE 子句中的分片索引值(字符串),會被提取出來嘗試轉(zhuǎn)換成 Java 內(nèi)部的日期類型

5. 然后求分片索引值與起始日期的差:如果分片索引值不早于 sBeginDate(哪怕晚于 sEndDate),就以 MySQL 分片承載的天數(shù)為模數(shù),對分片索引值求模得到所屬分片;如果分片索引值早于 sBeginDate,就會被放到 defaultNode 分片上

與MyCat的類似分片算法對比

中間件

DBLE

MyCat

分片算法種類 date 分區(qū)算法 按日期(天)分片

兩種中間件的取模范圍分片算法使用上無差別

開發(fā)注意點(diǎn)

【分片索引】1. 必須是字符串,而且 java.text.SimpleDateFormat 能基于用戶指定的 dateFormat 來轉(zhuǎn)換成 java.util.Date

【分片索引】2. 提供帶狀模式和環(huán)狀模式兩種模式

【分片索引】3. 帶狀模式以 sBeginDate(含)起,以 86400000 毫秒(24 小時(shí)整)為一份,每 sPartionDay 份為一個(gè)分片,理論上分片數(shù)量可以無限增長,但是出現(xiàn) sBeginDate 之前的數(shù)據(jù)而且沒有設(shè)定 defaultNode 的話,會路由失?。ㄈ绻?defaultNode,則路由至 defaultNode)

【分片索引】4. 環(huán)狀模式以 86400000 毫秒(24 小時(shí)整)為一份,每 sPartionDay 份為一個(gè)分片,以 sBeginDate(含)到 sEndDate(含)的時(shí)間長度除以單個(gè)分片長度得到恒定的分片數(shù)量,但是出現(xiàn) sBeginDate 之前的數(shù)據(jù)而且沒有設(shè)定 defaultNode 的話,會路由失?。ㄈ绻?defaultNode,則路由至 defaultNode)

【分片索引】5. 無論哪種模式,分片索引字段的格式化字符串 dateFormat 由用戶指定

【分片索引】6. 無論哪種模式,劃分不是以日歷時(shí)間為準(zhǔn),無法對應(yīng)自然月和自然年,且會受閏秒問題影響

運(yùn)維注意點(diǎn)

【擴(kuò)容】1. 帶狀模式中,隨著 sBeginDate 之后的數(shù)據(jù)出現(xiàn),分片數(shù)量的增加無需再平衡

【擴(kuò)容】2. 帶狀模式?jīng)]有自動增添分片的能力,需要運(yùn)維手工提前增加分片;如果路由策略計(jì)算出的分片并不存在時(shí),會導(dǎo)致失敗

【擴(kuò)容】3. 環(huán)狀模式中,如果新舊 [sBeginDate,sEndDate] 之間有重疊,需要進(jìn)行部分?jǐn)?shù)據(jù)遷移;如果新舊 [sBeginDate,sEndDate] 之間沒有重疊,需要數(shù)據(jù)再平衡

配置注意點(diǎn)

【配置項(xiàng)】1. 在 rule.xml 中,可配置項(xiàng)為 propertyname="sBeginDate" 、 propertyname="sPartionDay" 、 propertyname="dateFormat" 、 propertyname="sEndDate" 和 propertyname="defaultNode"

【配置項(xiàng)】2.在 rule.xml 中配置 propertyname="dateFormat",符合 java.text.SimpleDateFormat 規(guī)范的字符串,用于告知 DBLE 如何解析sBeginDate和sEndDate

【配置項(xiàng)】3.在 rule.xml 中配置 propertyname="sBeginDate",必須是符合 dateFormat 的日期字符串

【配置項(xiàng)】4.在 rule.xml 中配置 propertyname="sEndDate",必須是符合 dateFormat 的日期字符串;配置了該項(xiàng)使用的是環(huán)狀模式,若沒有配置該項(xiàng)則使用的是帶狀模式

【配置項(xiàng)】5.在 rule.xml 中配置 propertyname="sPartionDay",非負(fù)整數(shù),該分片策略以 86400000 毫秒(24 小時(shí)整)作為一份,而 sPartionDay 告訴 DBLE 把每多少份放在同一個(gè)分片

【配置項(xiàng)】6.在 rule.xml 中配置 propertyname="defaultNode" 標(biāo)簽,非必須配置項(xiàng),不配置該項(xiàng)的話,用戶的分片索引值沒落在 mapFile 定義

mysql怎么去掉hash分區(qū)

分區(qū)管理

常規(guī)HASH和線性HASH的增加收縮分區(qū)的原理是一樣的。增加和收縮分區(qū)后原來的數(shù)據(jù)會根據(jù)現(xiàn)有的分區(qū)數(shù)量重新分布。HASH分區(qū)不能刪除分區(qū),所以不能使用DROP PARTITION操作進(jìn)行分區(qū)刪除操作;

只能通過ALTER TABLE ... COALESCE PARTITION num來合并分區(qū),這里的num是減去的分區(qū)數(shù)量;

可以通過ALTER TABLE ... ADD PARTITION PARTITIONS num來增加分區(qū),這里是null是在原先基礎(chǔ)上再增加的分區(qū)數(shù)量。

1.合并分區(qū)

減去3個(gè)分區(qū)

ALTER TABLE tblinhash COALESCE PARTITION 3;

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION

FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tblinhash';

注意:減去兩個(gè)分區(qū)后,數(shù)據(jù)根據(jù)現(xiàn)有的分區(qū)進(jìn)行了重新的分布,以'2003-04-14'為例:POWER(2, CEILING( LOG(2,3) ))=4,2003(4-1)=3,3=3,3(CEILING(3/2)-1)=1,所以現(xiàn)在的'2003-04-14'這條記錄由原來的p3變成了p1

2.增加分區(qū)

增加4個(gè)分區(qū)

ALTER TABLE tblinhash add PARTITION partitions 4;

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION

FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tblinhash';

當(dāng)在3個(gè)分區(qū)的基礎(chǔ)上增加4個(gè)分區(qū)后,‘2003-04-14’由原來的p1變成了p3,而另一條記錄由原來的p2變成了p6


分享標(biāo)題:mysql怎么去分片 mysql的分片和分區(qū)
網(wǎng)頁地址:http://weahome.cn/article/hhipgs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部