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就卡了因为数据太多了,这个时候很多人都是备份然后清空数据,这个工作大并且麻烦,以前的数据很难在使用 ...
随机推荐
- Leetcode 54:Spiral Matrix 螺旋矩阵
54:Spiral Matrix 螺旋矩阵 Given a matrix of m x n elements (m rows, n columns), return all elements of t ...
- ajax 分页点击数据缓存
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 亲测可用)html5 file调用手机摄像头
在切图网一个客户的webapp项目中需要用到 html5调用手机摄像头,找了很多资料,大都是 js调用api 然后怎样怎样,做了几个demo测试发现根本不行, 后来恍然大悟,用html5自带的 in ...
- [JOYOI] 1055 沙子合并
题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目描述 设有N堆沙子排成一排,其编号为1,2,3,-,N(N<=300).每堆沙子有 ...
- 常见的Redis问题?
Redis的那些最常见面试问题[转] 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据 ...
- selenium切换frame(iframe)
例如网页代码为: <!DOCTYPE html><html lang="en"><head> <meta charset="UT ...
- Spider-Python爬虫之XPath 教程
原文链接:https://www.runoob.com/xpath/xpath-syntax.html XPath 术语 XPath 节点 七种类型:在 XPath 中,有七种类型的节点:元素.属性. ...
- Apache Ambari 2.7.3.0 离线安装
1. 准备 (内存 3G 硬盘 40G) 0)设置ssh无密码 ssh-keygencat id_rsa.pub >> authorized_keyschmod 700 ~/.sshchm ...
- ASP.NET MVC的帮助类HtmlHelper和UrlHelper
在ASP.NET MVC框架中没有了自己的控件,页面显示完全就回到了写html代码的年代.还好在asp.net mvc框架中也有自带的HtmlHelper和UrlHelper两个帮助类.另外在MvcC ...
- Selenium打开谷歌浏览器提示chromedriver.exe停止运行且浏览器显示请关闭开发者模式
提示关闭开发者模式,其实是chromedriver.exe与chrome 浏览器版本不一致导致的, 查看浏览器版本方法 在浏览框输入,chrome://version/. 显示是 Google Ch ...