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配置不须要client改动。
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都要改动,改动成按月进行查询。把日期參数传入。
数据库的扩展性增强了,能够支持数据持续增长的业务了。
Mycat(5):聊天消息表数据库按月分表实践,平滑扩展的更多相关文章
- Mycat教程---数据库的分库分表
mycat介绍 介绍在官方网站上有比较详细的介绍,在这里复制粘贴没什么意思,大家到官网上看 官网链接 前置条件 本教程是在window环境下运行的,实际生产推荐在Linux上运行. 必备条件(自行安装 ...
- 按月分表(create table)
PHP 按月分表控制台命令(yii2版) <?php /** * @Purpose: 按月分表脚本 * @User: Chrdai * @Date: 2019/3/19 * @Time: 15: ...
- 【MySQL】数据库(分库分表)中间件对比
分区:对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm. 根据一定的规则把数据文件(MYD)和索引文件(MYI)进行了分割,分区后的表 ...
- mysql数据库为什么要分表和分区?
一般下载的源码都带了MySQL数据库的,做个真正意义上的网站没数据库肯定不行. 数据库主要存放用户信息(注册用户名密码,分组,等级等),配置信息(管理权限配置,模板配置等),内容链接(html ,图片 ...
- mysql如何查询多样同样的表/sql分表查询、java项目日志表分表的开发思路/按月分表
之前开发的一个监控系统,数据库的日志表是单表,虽然现在数据还不大并且做了查询sql优化,不过以后数据库的日志表数据肯定会越来越庞大,将会导致查询缓慢,所以把日志表改成分表,日志表可以按时间做水平分表, ...
- Mycat安装并实现mysql读写分离,分库分表
Mycat安装并实现mysql读写分离,分库分表 一.安装Mycat 1.1 创建文件夹 1.2 下载 二.mycat具体配置 2.1 server.xml 2.2 schema.xml 2.3 se ...
- Mysql数据库进阶之(分表分库,主从分离)
前言:数据库的优化是一个程序员的分水岭,作为小白我也得去提前学习这方面的数据的 (一) 三范式和逆范式 听起范式这个迟非常专业我来举个简单的栗子: 第一范式就是: 把能够关联的每条数据都拆分成一个 ...
- 什么是分表和分区 MySql数据库分区和分表方法
1.为什么要分表和分区 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性 ...
- .NET 5 全自动分表组件,.NET 分表方案 ,分表架构与设计
一.疑问&目的 1.1 分表使用场景 (1)可扩展架构设计,比如一个ERP用5年不卡,到了10就卡了因为数据太多了,这个时候很多人都是备份然后清空数据,这个工作大并且麻烦,以前的数据很难在使用 ...
随机推荐
- spring的设计思想
在学习Spring框架的时候, 第一件事情就是分析Spring的设计思想 在学习Spring的时候, 需要先了解耦合和解耦的概念 耦合: 简单来说, 在软件工程当中, 耦合是指对象之间的相互依赖 耦合 ...
- 【C语言】控制台窗口图形界面编程(六):光标设置
目录 00. 目录 01. CONSOLE_CURSOR_INFO结构 02. GetConsoleCursorInfo函数 03. SetConsoleCursorInfo函数 04. SetCon ...
- 瀑布流布局js
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- KBE实践——登录案例
目录 服务器 ``` void maini(){ printf("hello world"); } ``` 最小资产库创建 entity配置 实体的Python实现 创建第一个空间 ...
- 升级PHP7操作MongoDB
前言 使用 PHP+MongoDB 的用户很多,因为 MongoDB 对非结构化数据的存储很方便.在 PHP5 及以前,官方提供了两个扩展,Mongo 和 MongoDB,其中 Mongo 是对以 M ...
- lucene-5.3.1配置(win7x64)
lucene下载地址:http://www.us.apache.org/dist/lucene/java/5.3.1/lucene-5.3.1.zip 下载之后解压 控制台应用程序下配置: 找到luc ...
- nginx+redis安装配置(内存型数据库)实现session的共享
注意:借鉴原文章:http://www.cnblogs.com/roy-blog/p/7196054.html 感兴趣的可以加一下481845043 java交流群,共同进步. 1 session的概 ...
- Python之“Hello World”
Python之“Hello World” 了解Python: 编译型和解释型 编译:把明文代码执行前,先转换成二进制,在执行.这个过程叫编译 解释器:将明文代码转成二进制的 Linux中,gcc编译, ...
- 张小龙最新内部演讲:KPI 是副产品,警惕复杂流程
张小龙最新内部演讲:KPI 是副产品,警惕复杂流程 各位 WXG(微信事业群)的同事们,大家早上好!又到我们一年一度的领导力大会. 大家都看到,我们微信团队膨胀还是比较快的,有 1500 多人了.对此 ...
- 【03】《论道html5》(全)
[03] <论道html5> 共320页. 魔芋:已看完. 读后感:html5各个新特性的介绍.介绍了canvas,web socket,audio,video,web wor ...