IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Mycat超详细最常用的水平分表规则 -> 正文阅读

[数据结构与算法]Mycat超详细最常用的水平分表规则

  • Mycat水平分表ER表
<table name="orders" dataNode="dn1,dn2" rule="mod_rule" >
	<childTable name="orders_detail" primaryKey="id" joinKey="order_id" parentKey="id" >
</table>

# childTable 表示与orders有紧密关联的表,该表的order_id外键关联了orders表的id主键,这样对两个表
# 进行join关联操作时,两表中关联的行都分布在同一服务器中
# mod_rule 规则表示对分片字段进行取模运算
  • Mycat水平分表全局表

①全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性。
②全局表的查询操作,只从一个节点获取。
③全局表可以跟任何r个表进行JOIN操作。

<table name="dict_order_type" dataNode="dn1,dn2" type="global" ></table> 
# 全局表dict_order_type 要被dn1,dn2中的数据库使用,标记该表位global
  • 分片枚举

通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则。

# (1)修改schema.xml配置文件。
<table name="orders_ware_info" dataNode="dn1,dn2" rule="sharding_by_intfile"></table>
# (2)修改rule.xml配置文件
<tableRule name="sharding_by_intfile">
	<rule>
		<columns>areacode</columns>
		<algorithm>hash-int</algorithm>
	</rule>
</tableRule>
.........
<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap">
	<property name="mapFile">partition-hash-int.txt</property>
	<property name="type">1</property>
	<property name="defaultNode">0</property>
</function>
# 对areacode自己指定分片规则
# partition-hash-int.txt配置文件需要自己配置
# columns:分片字段,algorithm:分片函数。
# mapFile:标识配置文件名称,type: 0为int型、非0为String
# defaultNode:默认节点:小于О表示不设置默认节点,大于等于О表示设置默认节点
# 设置默认节点如果碰到不识别的枚举值,就让它路由到默认节点,如不设置不识别就报错

# 数据节点是以0开始计数的
# partition-hash-int.txt的内容
# 110=0 表示areacode=110的行就放在dn1
# 120=1 表示areacode=120的行就放在dn2
  • 范围约定

此分片适用于,提前规划好分片字段某个范围属于哪个分片。

#(1)修改schema.xml配置文件
<table name="payment_info" dataNode="dn1.dn2" rule="auto_sharding_long" ></table>
# (2)修改rule.xml配置文件。
<tableRule name="auto_sharding_long">
	<rule> 
		<columns>order_id</columns>
		<algorithm>rang-long</algorithm>
	</rule>
</tableRule>
...........
<function name="rang-long" class=""io.mycat.route.function.AutoPartitionByLong">
	<property name="mapFile">autopartition-long.txt</property>
	<property name="defaultNode">0</property>
</function>
# columns:分片字段,algorithm:分片函数。# mapFile:标识配置文件名称。
# defaultNode:默认节点:小于О表示不设置默认节点,大于等于О表示设置默认节点,设置默认节点如果碰到不识别的枚举值,就让它路由到默# 认节点,如不设置不识别就报错。
# (3)修改autopartition-long.txt配置文件。
0-102=0
103-200=1
  • 按日期分片

设置时间,日期划分分片

#(1)修改schema.xml配置文件·
<table name="login_info" dataNode="dn1.dn2" rule="sharding_by_date" ></table>
# (2)修改rule.xml配置文件,
<tableRule name="sharding_by_date">
	<rule>
		<columns>login_date</columns>
		<algorithm>shardingByDate</algorithm>
	</rule>
</tableRule>
................
<function name="shardingByDate"class="io.mycat.route.function.PartitionByDate">
	<property name="dateFormat">yyyy-MM-dd</property>
	<property name="sBeginDate">2019-01-O1</property>
	<property name="sEndDate">2019-O1-04</property>
	<property name="sPartionDay">2</property>
</function>
# columns:分片字段,algorithm:分片函数。
# dateFormat : 日期格式
# sBeginDate :开始日期。
# sEndDate:结束日期,则代表数据达到了这个日期的分片后循环从开始分片插入
# sPartionDay :分区天数,即默认从开始日期算起,分隔2天一个分区。
  • 全局序列

在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一。为此,Mycat 提供了全局sequence,并且提供了包含本地配置和数据库配置等多种实现方式

1、本地文件:
  此方式Mycat 将 sequence 配置到文件中,当使用到 sequence 中的配置后,Mycat会更下。classpath中的sequence_conf.properties文件中sequence当前的值。
①优点:本地加载,读取速度较快。
②缺点:抗风险能力差,Mycat所在主机安机后,无法读取本地文件。

2、时间戳方式
  全局序列D= 64位二进制(42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加)换算成十进制为18位数的long类型,每毫秒可以并发12位二进制的累加。
①优点:配置简单
②缺点:18位ID过长

3、数据库方式:
  利用数据库一个表来进行计数累加。但是并不是每次生成序列都读写数据库,这样效率太低。Mycat 会预加载一部分号段到Mycat 的内存中,这样大部分读写序列都是在内存中完成的。·如果内存中的号段用完了Mycat 会再向数据库要一次。
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 12:02:00  更:2021-10-15 12:02:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:43:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码