mysql分表实践

一、为什么分表

为了解决大数据表导致的mysql性能低下的问题。那多少数据量算大数据表呢?当你的单表存储数据量达到百万,千万级别时就该考虑分表了。我们部分业务的单表存储已经达到了亿级,分表前为了加个字段,DBA和开发人员需要值守一晚上,还不一定能成功。终于忍不了了,妈的,拆表。

二、如何分表

常用的分表方式分为两类,垂直分表和水平分表

1、 垂直分表

所谓垂直分表,就是增加扩展表,来分单主表的压力,原则是:
1.1 常用和不常用的分开,这种方式很常见,实现起来也比较简单。
1.2 把大字段拆到单独的表里,我们会把text类型的字段单独存储。

2、水平分表

水平分表就是根据不同的维度把表拆分成多个。我们要根据不同的业务模型选择不同的分表方式,这里简单介绍下我们用到的也是比较常用的两种。

2.1冷热数据分表:对于虽然存量数据很多,但是日常查询只会用到近期数据的情况下,推荐这种方式。把冷热数据分别放到两张表里,定时把热数据表里的数据迁到冷数据表里,增删改查都是操作的热数据表。这种方式改造成本小,效果很好。

ticket_old //存储存量不常用数据
ticket_tmp //存储最新数据

2.2按业务属性分表:分析业务场景中主要用的查询字段是什么,根据该字段对数据进行业务切分。比如说时间,类型等等。选取字段的时候既要兼顾业务需求,也要防止区分度太低导致分表的数据量依然庞大问题。

tikcet_201901
ticket_201902
...

2.3哈希分表:个人觉得跟2.2方式类似,如果业务查询的字段是id类型,我们需要通过哈希取模来分表,如下。这也是我们系统目前采用的分表方式。当然具体用什么哈希值去取模请根据自己的业务场景选定。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章