支持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. encodeURL() vs encodeRedirectURL()

    当用URL重写方式来管理Session的时候,通过以上两个方法把session ID写到URL中.不同点是:两个方法确定是否需要包含session ID的逻辑不同.在调用HttpServletResp ...

  2. 解压Windows的install.wim文件

    转自无需软件,解压Win8/Win8.1的install.wim文件 一.检查镜像版本: 镜像中包含多个版本,需要确认自己需要的版本,我的镜像路径是"F:\win8.1\sources\in ...

  3. 如何打造一款五星级的 APP ?

    移动互联网大潮来袭!据统计,2015 年平均每天有 1000 个新的应用上架,而这些应用的现状可以说是鱼龙混杂,同是每个人的眼光.品味.意识和利益都不同,因此每人眼中的应用也是不同的.在巨大的市场竞争 ...

  4. 转:synchronized和LOCK的实现原理---深入JVM锁机制

    JVM底层又是如何实现synchronized的? 目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug ...

  5. Energy Minimization

    zoj2539:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2539 题意:公式第一项只要当xi=0时才会有作用,第二项只 ...

  6. linux RWT

    http://www.cnblogs.com/qlwy/archive/2011/06/26/2121919.html#undefined

  7. C++中结构体与类的区别(结构不能被继承,默认是public,在堆栈中创建,是值类型,而类是引用类型)good

    结构是一种用关键字struct声明的自定义数据类型.与类相似,也可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等,不过,结构是值类型. 1.结构的构造函数和类的构造函数不同. a. ...

  8. 在 ActionBar 添加刷新按钮

    在以前版本的 Gmail 应用中,ActionBar 上有个刷新菜单,点击一下刷新菜单变成一个转圈的刷新标示动画图片. 之前实现该功能的时候都是使用一个类库 RefreshActionItem来实现的 ...

  9. Haskell函数的语法

    本章讲的就是 Haskell 那套独特的语法结构,先从模式匹配开始.模式匹配通过检查数据的特定结构来检查其是否匹配,并按模式从中取得数据. 在定义函数时,你可以为不同的模式分别定义函数本身,这就让代码 ...

  10. SQL Server 阻塞分析

    一.加锁(locking).阻塞(blocking).死锁(deadlock)定义        加锁:用于管理多个连接的进程.当连接需要访问一块数据时,在这些数据上放置某种类型的锁.      阻塞 ...