MyException - 我的异常网
当前位置:我的异常网» 数据库 » Mycat(五):聊天消息表数据库按月分表实践,平滑

Mycat(五):聊天消息表数据库按月分表实践,平滑扩展

www.MyException.Cn  网友分享于:2015-07-23  浏览:0次
Mycat(5):聊天消息表数据库按月分表实践,平滑扩展

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/47003577 未经博主允许不得转载。

1,业务需求

比如一个社交软件,比如像腾讯的qq。可以进行群聊天(gid),也可以单人聊天。
数据量按月增加需要按月进行数据库拆分。
比如按照2015年进行12个月拆分,同时可以配合gid进行水平拆分,也可以利用mysql分区。
mycat官方也推荐这样使用,这样可以增加单机单数据库的数据量,因为文件分开了。

关于mycat分区参考:
【 数据库垂直拆分,水平拆分利器,cobar升级版mycat】
http://blog.csdn.net/freewebsys/article/details/44046365

2,按月分表方案

首先将消息表拆分成12个月表,同时每一个月表可以拆分成100个分区表,mysql分区执行起来灵活,按月分表可以随时间一直分下去,一次创建好一年的分表。基本上不需要数据迁移。相比数据库的分区最大的好处就是可以跨多个数据库进行分区。可以做到吞吐量是单机的N倍。扩展性好,数据库可以是一个实体机器,也可以一个实体机器多个数据库,配置灵活,完全在mycat配置不需要客户端修改。

mysql数据库创建语句:

CREATE TABLE `msg` (
  `id` bigint(20) NOT NULL,
  `gid` bigint(20) DEFAULT NULL COMMENT '群id,mysql分区字段',
  `content` varchar(4000),
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `create_date` int(8) DEFAULT NULL COMMENT '按月分表字段,不能为空。',
  PRIMARY KEY (`id`,`gid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
PARTITION BY KEY(`gid`) 
PARTITIONS 100;

参考之前博客:
【Mycat 水平分表,垂直分表实践(2)】博客数据表拆分和全局id
http://blog.csdn.net/freewebsys/article/details/44399901

其中规则xml的配置如下:按照自然月进行分区,分区字段是create_date

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://org.opencloudb/">
    <!--msg 分区配置,按照自然月进行分区,分区字段是create_date-->

    <tableRule name="sharding-by-month"> <rule>
        <columns>create_date</columns>
        <algorithm>sharding-by-month</algorithm> </rule>
    </tableRule>
    <function name="sharding-by-month" class="org.opencloudb.route.function.PartitionByMonth">
        <property name="dateFormat">yyyyMMdd</property> 
        <property name="sBeginDate">20150101</property>
    </function>
</mycat:rule>

schema.xml配置:

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">

        <schema name="mycat" checkSQLschema="false" sqlMaxLimit="100">
                <table name="MYCAT_SEQUENCE" primaryKey="name" type="global" dataNode="dataHost01" />
        </schema>

        <schema name="msg" checkSQLschema="false" sqlMaxLimit="100">
            <table name="msg" primaryKey="create_date" dataNode="nodeMsg201501,nodeMsg201502,nodeMsg201503,nodeMsg201504" rule="sharding-by-month" />
        </schema>

        <!--按照月份进行拆分,一次做好一年的数据库。同时数据库中,可以根据实际情况在做mysql分区。-->
        <dataNode name="nodeMsg201501" dataHost="dataHost01" database="msg_201501" />
        <dataNode name="nodeMsg201502" dataHost="dataHost01" database="msg_201502" />

        <dataNode name="nodeMsg201503" dataHost="dataHost01" database="msg_201503" />
        <dataNode name="nodeMsg201504" dataHost="dataHost01" database="msg_201504" />

        <!-- 可以一直按月分区下去。 -->

        <dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0"
                writeType="0" dbType="mysql" dbDriver="native">
                <heartbeat>select 1</heartbeat>
                <writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="root"/>
        </dataHost>

</mycat:schema>

说明:这里按自然月分区需要使用1.4的版本。里面包括规则类,或者把这个类拷贝到1.3的jar里面也行。

4,总结

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/47003577 未经博主允许不得转载。

使用mycat可以大大提高数据库的存储能力,对于每月自然增长的数据,按月存储是最好的办法。同时每一个组使用自己的id自增策略,都从1开始计算,这样在查询历史数据的适合也按月进行迭代查询,当然所有牵扯到查询的sql都要修改,修改成按月进行查询。把日期参数传入。数据库的扩展性增强了,可以支持数据持续增长的业务了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

文章评论

程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员的鄙视链
程序员的鄙视链
程序员应该关注的一些事儿
程序员应该关注的一些事儿
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
编程语言是女人
编程语言是女人
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
Java程序员必看电影
Java程序员必看电影
旅行,写作,编程
旅行,写作,编程
我是如何打败拖延症的
我是如何打败拖延症的
代码女神横空出世
代码女神横空出世
一个程序员的时间管理
一个程序员的时间管理
每天工作4小时的程序员
每天工作4小时的程序员
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
漫画:程序员的工作
漫画:程序员的工作
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
程序员必看的十大电影
程序员必看的十大电影
程序员都该阅读的书
程序员都该阅读的书
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
老程序员的下场
老程序员的下场
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员和编码员之间的区别
程序员和编码员之间的区别
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
 程序员的样子
程序员的样子
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
为什么程序员都是夜猫子
为什么程序员都是夜猫子
鲜为人知的编程真相
鲜为人知的编程真相
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
我的丈夫是个程序员
我的丈夫是个程序员
10个调试和排错的小建议
10个调试和排错的小建议
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
那些争议最大的编程观点
那些争议最大的编程观点
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
中美印日四国程序员比较
中美印日四国程序员比较
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有