支持MySql的数据库自动分表工具DBShardTools发布
2023-09-11 14:20:18 时间
支持MySql的数据库自动分表工具DBShardTools发布
前段时间参与了公司的一个项目,这个项目的特点是数据量、访问量都比较大,考虑使用数据库水平分表策略,Google了大半天,竟然没有找到分表工具。于是自己写了个数据库水平分表工具,支持MS Sql Server和 MySQL,对MYSQL支持比较好。
下面介绍下分表工具的使用方法。
首先是设置数据库连接界面
输入连接名称(也可以点击右边的选择框,从之前保存的连接中选择),选择数据库类型(目前支持Mysql和Sql Server),输入ip地址、数据库名称、用户名、密码后点击测试连接,如果提示连接成功,说明设置正确。
点击确定按钮进入主界面:
执行分表操作时,必须要有主表,主表名称可以手工输入也可以通过点击右边的选择框,然后在下拉列表中选择。分表格式可以自己定义,分表逻辑也可以自己定义,后面会具体介绍,例子中的分表逻辑是划分为1000个分表,表名为4位16进制,也就是0000~03e7。操作类型有三种:1、创建分表;2、修改分表(比如说在所有的分表中添加字段或删除字段);3、删除分表。操作类型选择后DDL会自动生成(可以根据需要适当修改)。
点击确定,执行分表操作。
查看数据库,分表shoppingcart_0000~shoppingcart_03e7已经生成成功。
自定义分表命名策略
通过实现INameStrategy接口的GetTableNumbers方法来自定义分表后缀名称
public interface INameStrategy
{
string[] GetTableNumbers();
}
比如:
public class NameStrategy : INameStrategy
{
private readonly int _startIndex;
private readonly int _endIndex;
private readonly int _toBase;
private readonly int _totalWidth;
public NameStrategy(int startIndex, int endIndex, int toBase, int totalWidth)
{
_startIndex = startIndex;
_endIndex = endIndex;
_toBase = toBase;
_totalWidth = totalWidth;
}
public string[] GetTableNumbers()
{
List<string> tableNames = new List<string>();
for (int i = _startIndex; i <= _endIndex; i++)
{
tableNames.Add(Convert.ToString(i, _toBase).PadLeft(_totalWidth, '0'));
}
return tableNames.ToArray();
}
}
然后在unity.config中注册自定义的命名策略实现
<register type="DBShardTools.Core.INameStrategy, DBShardTools.Core" mapTo="DBShardTools.Core.NameStrategy, DBShardTools.Core">
<constructor>
<param name="startIndex" value="0" />
<param name="endIndex" value="999" />
<param name="toBase" value="16" />
<param name="totalWidth" value="4" />
</constructor>
<lifetime type="singleton"/>
</register>
该分表工具目前对MySql支持比较好,比如可以自动生成创建分表的DDL,Sql Server数据库要自己将建表的脚本贴到DDL文本框中。
相关文章
- MySQL数据库备份
- 【MySQL】批量删除mysql中数据库中的表
- linux - mysql 异常:MySQL Daemon failed to start.
- mysql分享一:运维角度浅谈MySQL数据库优化
- MYSQL错误解决:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- 优化MySQL数据库性能的八种方法
- 使用mysql-connector-python操作MYSQL数据库
- Mysql一个非常有用的内置函数今天碰到要把MySQL数据库中的varchar转换成date类型进
- 更改MySQL数据库的编码为utf8mb4
- Mysql数据库的使用总结之Innodb简介(一)
- MySQL批量SQL插入性能优化
- Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引
- MySQL日期及时间加减函数
- MYsql 数据库密码忘记(Window)-2(mysql 5.7)
- Atitit postgresql data type 数据类型与mysql对应表 数据库常用数据类型 PostgreMysql 整数intgreterInt 小数numericFL
- [手游新项目历程]-50-Mysql的大字段问题(数据库执行错误: Error=1118, Reason=Row size too large (> 8126))
- 详解MySQL information_schema数据库常用的表信息以及各表对应的字段信息;以及如何登录mysql和创建视图
- SpringBoot(Spring、SpringMVC)集成Mybatis操作Mysql数据库
- Mysql的mysqldump详解 mysql数据库备份和导入
- MYSQL提权之反弹SHELL——数据库提权属于webshell到管理员的纵向提权,本质还是利用udf提权,无非是在mysql自定义函数中使用了反弹shell而已
- 【mysql学习】2.创建数据库和表,学会使用 select,delete,update ,insert,where等指令