一、简介

在使用MyCat分库分表之后,如果还是使用MySql中的主键自增的话,已经无法保证这个自增主键在MySql集群中的唯一性了,为了实现全局唯一主键,MyCat提供了好几种方式实现全局唯一主键,分别有:

  • 本地文件方式
  • 数据库方式
  • 时间戳方式
  • 分布式 ZK ID生成器
  • ZK 递增 ID 生成

本文将对本地文件方式进行简单的说明,并通过一个示例描述其使用方法。

二、本地文件方式

此方式 MyCat 将 sequence 配置到文件中,当使用到 sequence 中的配置后,MyCat会更新sequence_conf.properties 文件中 sequence 当前的值(currentValue)。

具体步骤如下:

【a】sequence_conf.properties配置:

ORDER.HISIDS=
ORDER.MINID=1001
ORDER.MAXID=2000
ORDER.CURID=1000ORDERDETAIL.HISIDS=
ORDERDETAIL.MINID=1001
ORDERDETAIL.MAXID=2000
ORDERDETAIL.CURID=1000

【b】server.xml中执行序列生成方式sequnceHandlerType=0为本地文件方式:

<property name="sequnceHandlerType">0</property>

【c】server.xml配置逻辑库以及MyCat访问的用户信息:

 <user name="root"><property name="password">123456</property><property name="schemas">mycat_order</property><!-- 表级 DML 权限设置 --><!--            <privileges check="false"><schema name="TESTDB" dml="0110" ><table name="tb01" dml="0000"></table><table name="tb02" dml="1111"></table></schema></privileges>           --></user><user name="user"><property name="password">123456</property><property name="schemas">mycat_order</property><property name="readOnly">true</property></user>

【d】schema.xml配置分片节点、节点主机等信息:

 <schema name="mycat_order" checkSQLschema="false" sqlMaxLimit="100"><table name="t_order"  dataNode="dn1,dn2" rule="mod-long"><childTable name="t_order_detail" primaryKey="od_id" joinKey="order_id" parentKey="order_id"></childTable></table></schema><dataNode name="dn1" dataHost="host1" database="test_mycat" /><dataNode name="dn2" dataHost="host2" database="test_mycat" /><dataHost name="host1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="host1" url="192.168.1.12:3306" user="root"password="0905"></writeHost></dataHost><dataHost name="host2" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="host2" url="192.168.1.11:3306" user="root"password="0905"></writeHost></dataHost>

【e】rule.xml配置分片规则:

 <tableRule name="mod-long"><rule><columns>order_id</columns><algorithm>mod-long</algorithm></rule></tableRule><function name="mod-long" class="io.mycat.route.function.PartitionByMod"><!-- how many data nodes --><property name="count">2</property></function>

【f】接着启动MyCat进行测试,使用序列插入主键:

INSERT INTO `t_order`(`order_id`,`user_id`,`pay_mode`,`amount`)
VALUES (NEXT VALUE FOR MYCATSEQ_ORDER,101,1,111.1);INSERT INTO `t_order`(`order_id`,`user_id`,`pay_mode`,`amount`)
VALUES (NEXT VALUE FOR MYCATSEQ_ORDER,102,5,222.2);INSERT INTO `t_order`(`order_id`,`user_id`,`pay_mode`,`amount`)
VALUES (NEXT VALUE FOR MYCATSEQ_ORDER,103,7,333.3);
select * from t_order;

其中MYCATSEQ_ORDER对应序列名称ORDER,同理,使用order_detail为next value for MYCATSEQ_ORDERDETAIL

【g】测试结果:

可见,此时order_id已经根据本地配置自动增长:

如果需要详细的实现步骤,可以参考前面的一篇文件,https://blog.csdn.net/Weixiaohuai/article/details/99334650,这个入门示例也是使用的本地文件实现全局序列,保证主键全局唯一。

三、总结

在实际项目中,一般也不会采用本地文件方式生成主键,下面是其优缺点:

  • 优点:本地加载,读取速度较快。
  • 缺点:当 MyCAT 重新发布后,配置文件中的 sequence 会恢复到初始值。

以上就是关于MyCat中使用本地文件生成序列的总体步骤,建议小伙伴们都动手实现一次,这样印象就比较深刻。

MyCat全局序列之本地文件方式相关推荐

  1. 实践讲解Spring配置中心config(图+文,本地文件方式)

    1 缘起 微服务的学习过程中,发现了许多服务的配置是相同的,并且项目稳定运行期间不会轻易变更, 于是,自己开始做实验,将这些相同的配置提取出来放在配置中心, 各个服务需要时,通过这个配置中心获取,Sp ...

  2. mysql表数据以本地文件方式导入Hive

    1.mysql生成数据 1)创建数据库和数据表,脚本如下: SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FORE ...

  3. JavaScript读取本地json文件方式

    JavaScript读取本地文件方式: 假如有本地文件:authors.json 内容为: [ {"name": "Kwan-Liu Ma","num ...

  4. 分表扩展全局序列原理_高可用_单表存储千万级_海量存储_分表扩展---MyCat分布式数据库集群架构工作笔记0025

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们来说一下全局序列,现在我们做了分布式以后,东西都是全局的了 都要加个全局,以前可是没有,都 ...

  5. Groovy里读写本地文件的几种方式

    方法1和方法2分别如下图红色和蓝色高亮所示: 其中第八行的双引号包裹起来的变量代表GString,即JavaScript和ABAP里的字符串模板. 代码: new File('c:\\temp', ' ...

  6. 使用PDF.js实现前端和手机端网页预览PDF文件(可定制,支持本地文件、Base64编码和远程URL跨域方式)

    1.插件下载地址:https://mozilla.github.io/pdf.js/ 下载后解压pdfjs-1.10.88-dist.zip文件后得到: 2.把pdfjs-1.10.88-dist放到 ...

  7. 本地与linux互传文件方式

    实现本地与Linux服务器文件互传的常用方式:scp命令.sftp命令.lrzsz程序,xftp软件. 一.lrzsz程序 1.使用xshell软件ssh到linux服务器上. 2.输入rz命令回车检 ...

  8. 使用git下载项目到本地,指定本地文件夹位置的三种方式

    使用git下载项目到本地,指定本地文件夹位置的三种方式 使用VSCODE里的"克隆"功能直接粘贴项目链接即可选择本地想保存的位置. 使用git bash窗口下载项目之前,先切换到你 ...

  9. 分表扩展全局序列实际操作_高可用_单表存储千万级_海量存储_分表扩展---MyCat分布式数据库集群架构工作笔记0026

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们动手配置: 全局序列,来给咱们的集群,保证id的自增长和不重复. 首先我们在dn1上创建这 ...

  10. RocketMQ-创建MappedFile本地文件

    了解RocketMQ的都知道,它会保存所有的消息到本地文件.这个文件就是 MappedFile,每一个文件对应一个MappedFile.默认情况下大小位1g. 在MessageStoreConfig中 ...

最新文章

  1. android json转db,Android Room:将json结果转换为db对象的有效方法
  2. 微信小程序开发之选项卡
  3. mysql where in 中多个参数查询
  4. linux内核测试,Linux内核测试的生命周期
  5. centos linux7修改主机名,CentOS7操作系统下永久修改主机名
  6. java实现日期让随动变_java工具类(四)之实现日期随意跳转
  7. 12864汉字液晶显示驱动程序
  8. html5transform变形,transform-function
  9. (25):Silverlight 2 综合实例之Live Search
  10. 增加window服务器,Windows Server2012入门-添加服务器角色和功能
  11. 【MSP是什么】最佳管理实践指南
  12. 中国重工[601989]
  13. 参加了一场温州游资的婚礼,也太壕了
  14. canoe模拟发有checksum报文_CANoe 入门 Step by step系列(三)简单例子的剖析
  15. 从核酸检测平台崩盘看性能工程的范围
  16. 贝多芬第九交响第五乐章合唱歌词
  17. target=“_blank“有啥安全性问题?如何防范?
  18. 求最长公共子序列长度
  19. Compound Words
  20. linux安装binutils

热门文章

  1. 上古卷轴5python_python 基础(五)协程 —— 微线程 greenlet gevent
  2. 自动驾驶 8-4: 最小二乘法和最大似然法 Least Squares and the Method of Maximum Likelihood
  3. CDN 的诞生、术语、原理、特征以及应用场景
  4. 算法:回溯六 Permutations II数组全排列II
  5. 数据样本过大 数据维度过大:用户名做一个聚类2.可以将时间分段,达到降维的效果
  6. 235.二叉搜索树的最近公共祖先
  7. 凸优化第八章几何问题 8.4极值体积椭圆
  8. ValueError: operands could not be broadcast together with shapes (3000,20) (20,20)
  9. android studio for android learning (五) 最新Activity理解与其生命周期
  10. 【算法竞赛进阶指南 0x31 质数】阶乘分解【唯一分解定理】