支持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的数据库自动分表工具DBShardTools发布的更多相关文章

  1. Mysql系列四:数据库分库分表基础理论

    一.数据处理分类 1. 海量数据处理,按照使用场景主要分为两种类型: 联机事务处理(OLTP) 面向交易的处理系统,其基本特征是原始数据可以立即传送到计算机中心进行处理,并在很短的时间内给出处理结果. ...

  2. 【转】mysql分库分表,数据库分库分表思路

    原文:https://www.cnblogs.com/butterfly100/p/9034281.html 同类参考:[转]数据库的分库分表基本思想 数据库分库分表思路   一. 数据切分 关系型数 ...

  3. php面试专题---mysql数据库分库分表

    php面试专题---mysql数据库分库分表 一.总结 一句话总结: 通过数据切分技术将一个大的MySQLServer切分成多个小的MySQLServer,既攻克了写入性能瓶颈问题,同一时候也再一次提 ...

  4. Mysql Event 自动分表

    create table TempComments Like dycomments; 上述 SQL语句创建的新表带有原表的所有属性,主键,索引等. 自动分表怎么做呢? 使用上述语句自动创建分表. 那么 ...

  5. 数据库分库分表(sharding)系列【转】

    原文地址:http://www.uml.org.cn/sjjm/201211212.asp数据库分库分表(sharding)系列 目录; (一) 拆分实施策略和示例演示 (二) 全局主键生成策略 (三 ...

  6. 数据库分库分表(sharding)系列

    数据库分库分表(sharding)系列     目录; (一) 拆分实施策略和示例演示 (二) 全局主键生成策略 (三) 关于使用框架还是自主开发以及sharding实现层面的考量 (四) 多数据源的 ...

  7. mysql大数据解决方案--分表分库(0)

    引言 对于一个大型的互联网应用,海量数据的存储和访问成为了系统设计的瓶颈问题,对于系统的稳定性和扩展性造成了极大的问题.通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式. •水 ...

  8. MariaDB Spider 数据库分库分表实践

    分库分表 一般来说,数据库分库分表,有以下做法: 按哈希分片:根据一条数据的标识计算哈希值,将其分配到特定的数据库引擎中: 按范围分片:根据一条数据的标识(一般是值),将其分配到特定的数据库引擎中: ...

  9. mycat+ mysql集群 分库分表

    mycat介绍Mycat数据库分库分表中间件国内最活跃的.性能最好的开源数据库中间件!Mycat关键特性关键特性支持SQL92标准支持MySQL.Oracle.DB2.SQL Server.Postg ...

随机推荐

  1. html中子div用了浮动怎样让父div的大小自动撑开(清除浮动)

    浮动子div撑开父div的几种方法: (1)在父div中在添加一个清除浮动的子div<div style=" clear:both;"></div>,该di ...

  2. php多行字符串输出

      $content_header =<<<CONTENT_HEADER <section class="content-header"> <h ...

  3. 搭建laravel5全面教学,爬坑(windows下)。

    1.首先下载屌比的Composer 2.然后下载composer.phar 3.然后下载最新版Laravel框架 4.将下载下来的laravel压缩包扔到htdocs目录下(扔到别的目录没试过) 5. ...

  4. mysql 时间戳与日期格式的相互转换

    1.UNIX时间戳转换为日期用函数: FROM_UNIXTIME() ); 输出:2006-08-22 12:11:10 2.日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() Sel ...

  5. strtotime 的几点不同

    在php里面,strtotime()有点比较特殊,date函数也有点问题 if ( date(1,time()) == "Monday")    //似乎 date(1,time( ...

  6. git推送失败的问题

    git报错如下: fatal: 'origen' does not appear to be a git repositoryfatal: The remote end hung up unexpec ...

  7. LINUX防火墙firewall、iptables

    (1) 重启后永久性生效: 开启: systemctl enable iptables.service'.ln -s '/usr/lib/systemd/system/iptables.service ...

  8. 我学C的那些年[ch02]:宏,结构体,typedef

    c语言的编译过程: 预处理 编译 汇编 链接 而预处理中有三种情况: 文件包含( #include ) 条件编译(#if,#ifndef,#endif) 宏定义( #define ) 宏就是预处理中的 ...

  9. 关于Keil的安装与注册

    由于前一段时间一直在做关于stm32f407的相关内容,于是安装的Keil是MDK5,最近一阵子想再看看51单片机以前没有做过的内容,就要再安装一个Keil C51,结果就不可避免的遇到了两个软件必须 ...

  10. vs2015安装没有wim32

    刚开始在官网上下载VS2015没在意太多,选择了默认安装,结果是没有win64的,所以就不能写c代码.默认安装很多库都没有,所以要什么都得下载.转载一篇文章