MySQL大表优化

        最近有研发小伙伴请教我一个问题,他有某张表需要删除大量的数据,只保留最近小部分(最近一个月,数据量大约在300W左右)的数据,要怎么搞?

        然后我去看了下这表,5000W+数据,每个月以400W+左右的量在增长。这是记录用户每天参加活动的流水记录,数据需要即时查看,但流水型记录关心最近几天的数据即可。对!业务对这些数据确实是“喜新厌旧”。其实,删除历史数据,只保留最近一个月的数据,在此种条件下一般非常容易处理,其中一个比较简单的方法是,创建一张旧时表,将最近一个月的数据存至该表中,然后将表名更换。

比如数据库表名为: t1 , 相关的SQL如下:   

create t1_tmp like t1 ;   

insert into t1_tmp select * from t1 where time_condition > '2021-04-06' ;   

alter table t1 rename to t1_back_date ;

alter table t1_tmp rename to t1 ;

此处,需要注意的有两点:   

1. insert 执行的事务过大,可能会影响线上数据库的稳定;

2. 在执行过程中,表t1可能又新插入了数据,更改表名后,需要确定是否有新增数据;需要再一次将数据补齐。在补齐过程中,会有短暂的数据不一致(表已经插入了数据了,却需要后续的处理)。

针对问题1,可通过编写存储过程,或者相关的python或shell程序,将大事务分拆,进而避免因为数据库执行大事务而遇到各种各样的问题。

针对问题2,可检查表数据是否有新增,然后将相关数据重新插入至新表中。


       然而在此处,我比较关心的,不是如何将数据"删除"掉,而是背后引发的一些思考。首先,一般MySQL存放的,是一些比较重要的数据,比如一些用户信息、配置信息,或者业务对事务有所要求的数据。但是在此处,将这些日志型数据存放于MySQL,是否有所不妥?这一次操作过后,难道过几个月后,又需要再作一次操作?若果当此种数据需要保留较长时间,不能进行删除时该如何处理?对数据进行分表分库?

       对于此种“日志型”的数据,我们一般情况下是建议存放于MongoDB等NoSQL数据库中。这里以MongoDB为例。

        为什么选择MongoDB?是因为考虑到以下原因:

1. 天然的自带分片集群功能,数据库集群扩缩容较方便;

2. 有良好的数据压缩性能,节省了磁盘存储空间;

3. 良好的性能与功能,俗称性功能 ^_^ ;

4. 相对于Clickhouse,ElasticSearch等列式数据,写入没有延迟。

        当然,除了MongoDB外,在不同应用场景下,Clickhouse,ElasticSearch等会有它适用的应用场景,这里就不一一细说了。

         在部分研发眼中,数据量过亿了,或者过千万级别了,就是"大表"了,需要优化了,需要对数据进行"分表分库"。其实,数据表大不大,除了看行数外,还要看列数,索引数等,数据文件大小等。而且,对数据库性能影响大不大,还需要看表的查询方式,即SQL的效率。若果查询没优化好,2000条的数据也可以数据库实例拖死。

        对于某些研发,MySQL分表分库可能是解决"大表"所用得比较多的招式了。MySQL分表分库里第一条原则,我觉得是:能不用MySQL作分表分库,就不要用MySQL作分表分库。某些“大表”,优化访问它的SQL语句,主要磁盘空间等出现瓶颈,数据存放于单库MySQL中是没有问题的。若果数据量比较大,单库存放存在硬件资源不足的问题时,可考虑将其存放于MongoDB等NoSQL数据库中。

        什么时候才用上MySQL的分表分库?

1. 数据量很大

数据量来个一天几百上千万

2. 只能是关系型数据库,需要用到其事务特性等。


        综上,对于MySQL的大表,我们可以通过对其进行归档删除;使用其它NoSQL代替等方式对其进行优化。若通过数据库层面的优化不能满足我们的需求,或者性价比较低时。我们需要通过业务层面去优化,从而实现节省资源,事半功倍。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355

推荐阅读更多精彩内容