支持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. 谈memcache和memcached的区别

    用了段时间的memcache和memcached总结下认识,看很多人在用cache的时候,刚刚都没有搞清楚memcache 和 memcached的区别,还有就是使用的时候基本都是 get/set   ...

  2. 2016021902 - linux解压缩命令

    转载自:http://blog.csdn.net/luo86106/article/details/6946255 .gz 解压1:gunzip FileName.gz 解压2:gzip -d Fil ...

  3. 第三方:GDataXMLNode:xml解析库--备用

    一.GDataXMLNode说明   GDataXMLNode是Google提供的用于XML数据处理的类集.该类集对libxml2--DOM处理方式进行了封装,能对较小或中等的xml文档进行读写操作且 ...

  4. Linux下Java 编译运行说明

    命令行环境下Java编译运行 1. java的运行机制的基本概念: 源文件 也就是我们熟知的.java文件. 类文件  .class文件是编译器由.java文件编译而成.众所周知,Java的跨平台性在 ...

  5. 使用SeaJS实现模块化JavaScript开发

    前言 SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.与jQuery等JavaScript框架不同,SeaJS不会扩展封 ...

  6. mvn详解

    1.前言 Maven,发音是[`meivin],"专家"的意思.它是一个很好的项目管理工具,很早就进入了我的必备工具行列,但是这次为了把project1项目完全迁移并应用maven ...

  7. 【POJ3691】 DNA repair (AC自动机+DP)

    DNA repair Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Description B ...

  8. java数组遍历——iterator和for方法

    import Java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ArrayTest ...

  9. Android开源项目发现---Spinner选择器与日历选择器篇(持续更新)

    1. android-times-square Android日历部件 支持选取单个日期,多个日期,及日期区间段和对话框形式显示 项目地址:https://github.com/square/andr ...

  10. Activity 怎样获得另一个xml布局文件的控件

    两个布局文件,一个main.xml,一个main2.xml,一个MActivity,在MActivity的onCreate()里设置的是setContentView(R.layout.main).现在 ...