Mycat(5):聊天消息表数据库按月分表实践,平滑扩展
2015-07-22 15:01
204 查看
本文的原文连接是: /article/1665654.html 未经博主允许不得转载。
数据量按月增加需要按月进行数据库拆分。
比如按照2015年进行12个月拆分,同时可以配合gid进行水平拆分,也可以利用mysql分区。
mycat官方也推荐这样使用,这样可以增加单机单数据库的数据量,因为文件分开了。
关于mycat分区参考:
【 数据库垂直拆分,水平拆分利器,cobar升级版mycat】
/article/1665686.html
mysql数据库创建语句:
参考之前博客:
【Mycat 水平分表,垂直分表实践(2)】博客数据表拆分和全局id
/article/1665684.html
其中规则xml的配置如下:按照自然月进行分区,分区字段是create_date
schema.xml配置:
说明:这里按自然月分区需要使用1.4的版本。里面包括规则类,或者把这个类拷贝到1.3的jar里面也行。
使用mycat可以大大提高数据库的存储能力,对于每月自然增长的数据,按月存储是最好的办法。同时每一个组使用自己的id自增策略,都从1开始计算,这样在查询历史数据的适合也按月进行迭代查询,当然所有牵扯到查询的sql都要修改,修改成按月进行查询。把日期参数传入。数据库的扩展性增强了,可以支持数据持续增长的业务了。
1,业务需求
比如一个社交软件,比如像腾讯的qq。可以进行群聊天(gid),也可以单人聊天。数据量按月增加需要按月进行数据库拆分。
比如按照2015年进行12个月拆分,同时可以配合gid进行水平拆分,也可以利用mysql分区。
mycat官方也推荐这样使用,这样可以增加单机单数据库的数据量,因为文件分开了。
关于mycat分区参考:
【 数据库垂直拆分,水平拆分利器,cobar升级版mycat】
/article/1665686.html
2,按月分表方案
首先将消息表拆分成12个月表,同时每一个月表可以拆分成100个分区表,mysql分区执行起来灵活,按月分表可以随时间一直分下去,一次创建好一年的分表。基本上不需要数据迁移。相比数据库的分区最大的好处就是可以跨多个数据库进行分区。可以做到吞吐量是单机的N倍。扩展性好,数据库可以是一个实体机器,也可以一个实体机器多个数据库,配置灵活,完全在mycat配置不需要客户端修改。mysql数据库创建语句:
[code]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
/article/1665684.html
其中规则xml的配置如下:按照自然月进行分区,分区字段是create_date
[code]<?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配置:
[code]<?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,总结
本文的原文连接是: /article/1665654.html 未经博主允许不得转载。使用mycat可以大大提高数据库的存储能力,对于每月自然增长的数据,按月存储是最好的办法。同时每一个组使用自己的id自增策略,都从1开始计算,这样在查询历史数据的适合也按月进行迭代查询,当然所有牵扯到查询的sql都要修改,修改成按月进行查询。把日期参数传入。数据库的扩展性增强了,可以支持数据持续增长的业务了。
相关文章推荐
- 数据库工具
- memcached内存分配及回收初探
- 利用poi生成excell文件
- memcache安装及php的memcache支持
- 获取数据库的连接
- MySQL无法重启问题解决Warning: World-writable config file ‘/etc/my.cnf’ is ignored
- mysql cluster配置测试
- 记一次苦逼的SQL查询优化
- sqlserver 获取时间年月日时分秒
- redis删除数据后内存释放问题
- spring mongodb — upsert
- mysql 发生系统错误 1067
- mysql-锁表机制分析
- ubuntu下安装mysql,apt-get install mysql-server
- Mysql第九天 内部存储代码、绑定变量
- oracle批量执行sql文件的方法
- [VirtualBox] - Install Oracle Linux 7 on Oracle VirtualBox
- SQLSERVER 2012 收缩日志
- 如何让mysql的自动递增的字段重新从1开始呢?(
- Can't connect to MySQL server on '' (10060)