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

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

mycat分片表全局自增主鍵測試-創(chuàng)新互聯(lián)

mycat分片表全局自增主鍵測試

mycat分片表全局自增主鍵測試

一、全局序列號介紹
在實(shí)現(xiàn)分庫分表的情況下,數(shù)據(jù)庫自增主鍵已無法保證自增主鍵的全局唯一。為此,MyCat 提供了全局
sequence,并且提供了包含本地配置和數(shù)據(jù)庫配置等多種實(shí)現(xiàn)方式。

1.本地文件方式

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了綏濱免費(fèi)建站歡迎大家使用!
使用服務(wù)器本地磁盤文件的方式

2.數(shù)據(jù)庫方式
使用專用數(shù)據(jù)庫的方式

3.本地時(shí)間戳方式
使用時(shí)間戳算法方式

4.分布式ZK ID 生成器
基于ZK 與本地配置的分布式ID 生成器(可以通過ZK 獲取集群(機(jī)房)唯一InstanceID,也可以通過配置文
件配置InstanceID)

5.Zk 遞增方式
另一種ZK生成方式

6.其他方式

二、配置方式詳解
1.本地文件方式

配置方式:
sequence_conf.properties 文件中做如下配置:

# 這是全局表的設(shè)置
GLOBAL_SEQ.HISIDS=
GLOBAL_SEQ.MINID=1001
GLOBAL_SEQ.MAXID=1000000000
GLOBAL_SEQ.CURID=1000

# 下面是自定義表的設(shè)置

其中HISIDS 表示使用過的歷史分段(一般無特殊需要可不配置),MINID 表示最小ID 值,MAXID 表示大
ID 值,CURID 表示當(dāng)前ID 值。

server.xml 中配置:

0

注:sequnceHandlerType 需要配置為0,表示使用本地文件方式。
使用示例:
insert into table1(id,name) values(next value for MYCATSEQ_GLOBAL,‘test’);

缺點(diǎn):當(dāng)MyCAT 重新發(fā)布后,配置文件中的sequence 會恢復(fù)到初始值。
優(yōu)點(diǎn):本地加載,讀取速度較快。

[本地文件方式詳細(xì)配置和測試]

1.1 修改配置文件server.xml,指定加密方式為本地文件方式

0

1.2 在schema.xml文件中配置,增加表tt,ID為主鍵,在dn$1-3上分片,分片方式mod-log

1.3 修改sequence_conf.properties 文件中做如下配置:
# 這是全局表的設(shè)置
GLOBAL.HISIDS=
GLOBAL.MINID=10001
GLOBAL.MAXID=1000000000
GLOBAL.CURID=10000

# 下面是自定義表的設(shè)置
TT.HISIDS=
TT.MINID=1001
TT.MAXID=2000
TT.CURID=1000

1.4 建表tt
CREATE TABLE tt(
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name_` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

查看表結(jié)構(gòu)
mysql> desc tt;                                      
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name_ | int(10) unsigned | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

查看表分片情況
mysql> explain select * from tt;
+-----------+--------------------------------+
| DATA_NODE | SQL                            |
+-----------+--------------------------------+
| dn1       | SELECT * FROM tt LIMIT 3000000 |
| dn2       | SELECT * FROM tt LIMIT 3000000 |
| dn3       | SELECT * FROM tt LIMIT 3000000 |
+-----------+--------------------------------+
3 rows in set (0.07 sec)

1.5 插入數(shù)據(jù)測試
插入一條使用全局序列號
insert into tt(id,name_) values(next value for MYCATSEQ_GLOBAL,1);

查看序列號使用
mysql> SELECT * FROM TT;
+-------+-------+
| id    | name_ |
+-------+-------+
| 10001 |     1 |
+-------+-------+
1 row in set (0.00 sec)

插入一條使用TT序列號
insert into tt(id,name_) values(next value for MYCATSEQ_TT,2);

查看序列好使用情況
mysql> SELECT * FROM TT ORDER BY name_;
+-------+-------+
| id    | name_ |
+-------+-------+
| 10001 |     1 |
|  1001 |     2 |
+-------+-------+
2 rows in set (0.01 sec)

多插入一些數(shù)據(jù),查詢結(jié)果
mysql> SELECT * FROM TT ORDER BY name_;                              
+-------+-------+
| id    | name_ |
+-------+-------+
| 10001 |     1 |
|  1001 |     2 |
|  1002 |     3 |
|  1003 |     4 |
|  1004 |     5 |
|  1005 |     6 |
+-------+-------+
6 rows in set (0.00 sec)

這些數(shù)據(jù)再分片上的情況
mysql (db1)>select * from tt;
+------+-------+
| id   | name_ |
+------+-------+
| 1002 |     3 |
| 1005 |     6 |
+------+-------+
2 rows in set (0.00 sec)

mysql (db2)>select * from tt;
+------+-------+
| id   | name_ |
+------+-------+
| 1003 |     4 |
+------+-------+
1 row in set (0.00 sec)

mysql (db3)>select * from tt;
+-------+-------+
| id    | name_ |
+-------+-------+
|  1001 |     2 |
|  1004 |     5 |
| 10001 |     1 |
+-------+-------+

OK It works!!

優(yōu)點(diǎn):配置簡單,本地文件,讀寫速度快
缺點(diǎn):導(dǎo)致MYCAT變成有狀態(tài)的中間件,不利于部署集群

2.數(shù)據(jù)庫方式
數(shù)據(jù)庫方式存在比較明顯的缺點(diǎn),即MYCAT集群切換和保持序列的數(shù)據(jù)庫主從切換之后,不可控內(nèi)容較多
需要非常仔細(xì)的處理這些問題,維護(hù)成本較高,雖然實(shí)現(xiàn)MYCAT無狀態(tài),但有單點(diǎn)問題
3.本地時(shí)間戳方式

ID= 64 位二進(jìn)制 (42(毫秒)+5(機(jī)器 ID)+5(業(yè)務(wù)編碼)+12(重復(fù)累加)
server.xml

2

sequence_time_conf.properties
WORKID=0-31 任意整數(shù)
DATAACENTERID=0-31 任意整數(shù)

是個(gè)好方式

4.分布式ZK ID 生成器

-----最想測試的還是這個(gè)

配置選項(xiàng):

3

原理說明:
Zk 的連接信息統(tǒng)一在myid.propertieszkURL 屬性中配置。
基于ZK 與本地配置的分布式ID 生成器(可以通過ZK 獲取集群(機(jī)房)唯一InstanceID,也可以通過配置文件配置InstanceID)ID 結(jié)構(gòu):long 64 位,ID 大可占63 位

current time millis(微秒時(shí)間戳38 位,可以使用17 年)
instanceId(實(shí)例ID,可以通過ZK 或者配置文件獲取,5 位,也就是十進(jìn)制0-31)
threadId(線程ID,9 位)
increment(自增,6 位)
  • 一共63 位,可以承受單機(jī)房單機(jī)器單線程1000*(2^6)=640000 的并發(fā)。

  • 無悲觀鎖,無強(qiáng)競爭,吞吐量更高
    配置文件:sequence_distributed_conf.properties,只要配置里面:INSTANCEID=ZK 就是從ZK 上獲取InstanceID。

配置ZK ID生成器的主要步驟

4.1 配置zookeeper

zookeeper是hadoop的一個(gè)子項(xiàng)目
一般生產(chǎn)上需要配置zookeeper集群,奇數(shù)個(gè)節(jié)點(diǎn),至少三個(gè)節(jié)點(diǎn)
為了測試mycat的相關(guān)特性,我們只搭建一個(gè)單節(jié)點(diǎn)的zookeeper

ZooKeeper Standalone模式

從Apache網(wǎng)站上(zookeeper.apache.org)下載ZooKeeper軟件包,我選擇了3.3.4版本的(zookeeper-3.3.4.tar.gz),在一臺Linux機(jī)器上安裝非常容易,只需要解壓縮后,簡單配置一下即可以啟動ZooKeeper服務(wù)器進(jìn)程。

將zookeeper-3.3.4/conf目錄下面的 zoo_sample.cfg修改為zoo.cfg,配置文件內(nèi)容如下所示:

tickTime=2000
dataDir=/home/hadoop/storage/zookeeper
clientPort=2181
initLimit=5
syncLimit=2

下面啟動ZooKeeper服務(wù)器進(jìn)程:
cd zookeeper-3.3.4/
bin/zkServer.sh start

這樣zookeeper就可以使用了,防火墻的配置自行處理

ZooKeeper 分布式模式
搭建生產(chǎn)網(wǎng)絡(luò)或夸機(jī)房分布式的時(shí)候再進(jìn)行補(bǔ)充
4.2 配置mycat

主要涉及三個(gè)方面,修改myid.properties,修改server.xml,修改sequence_distributed_conf.properties

myid.properties:

loadZk=true                 #使用zk管理mycat和ID
zkURL=127.0.0.1:2181        #zk服務(wù)器的地址和端口
clusterId=010               #本機(jī)房mycat集群的ID
myid=01001                  #集群內(nèi)mycat的ID
clusterNodes=mycat-02       #mycat節(jié)點(diǎn)的名稱
#server  booster  ;   booster install on db same server,will reset all minCon to 1
#type=server
#boosterDataHosts=dn2,dn3

server.xml:


    
        druidparser
        1
        3306
        3308
        65535
        
        3
    
    
        password
        dbykt
    

sequence_distributed_conf.properties:
INSTANCEID=01
CLUSTERID=01

上面三個(gè)文件修改完成后,復(fù)制conf下的所有文件到 conf/zkconf/目錄下
cp *.txt *.xml *.properties zkconf/

初始化:
cd ./bin/
./init_zk_data.sh

4.3 啟動mycat

先使用console看看啟動是否正常

./bin/mycat console

正常之后再進(jìn)行啟動
./bin/mycat start

4.4 測試mycat ZK 分布式ID生成器

使用工具Jmeter,此處不贅述

配置表ot1:

.....

......

重啟mycat
./bin/mycat restart

建表(因?yàn)橥瑫r(shí)測試了插入性能,所以表較為復(fù)雜)
CREATE TABLE `ot1` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
...............
...............

  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Jmeter 插入數(shù)據(jù)測試
使用的sql語句如下:
INSERT INTO `ot1` (
    `id`,
................
................
 

)
VALUES
    (
        next value for MYCATSEQ_OT,
...............
...............
 
    );

查詢觀察結(jié)果
mysql> SELECT id FROM ot1 ORDER BY id;

........

| 3894484648986705980 |
| 3894484648986705981 |
| 3894484649020260414 |
| 3894484649053814784 |
| 3894484649053814847 |
| 3894484649389359105 |
| 3894484649926230018 |
| 3894484649926230019 |
| 3894484649926230020 |
| 3894484649926230021 |
| 3894484649959784454 |
| 3894484649959784455 |
| 3894484649959784456 |
| 3894484649993338889 |
| 3894484649993338890 |
| 3894484650026893323 |
| 3894484650026893324 |
| 3894484650060447757 |
| 3894484650060447758 |
| 3894484650094002191 |
........

查詢數(shù)據(jù)總量:
mysql> select count(id) id_count from ot1;
+----------+
| id_count |
+----------+
| 37784391 |
+----------+

查出大ID:
mysql> select max(id) id from ot1 ;
+---------------------+
| id                  |
+---------------------+
| 3897338173617897525 |
+---------------------+
1 row in set (0.03 sec)

判斷一下是否有重復(fù)ID:
mysql> select count(id),id from ot1 group by id having count(id)>1;

Empty set (1 min 42.85 sec)

4.5 結(jié)論

分布式ZK ID生成器,果然強(qiáng)大。這為數(shù)據(jù)庫跨機(jī)房雙活提供了新的方案,使得雙A機(jī)房架構(gòu)下的數(shù)據(jù)最終一致性有了新的思路。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


當(dāng)前文章:mycat分片表全局自增主鍵測試-創(chuàng)新互聯(lián)
文章位置:http://weahome.cn/article/diodsh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部