美文网首页
浅谈数据库数据增长后

浅谈数据库数据增长后

作者: Best博客 | 来源:发表于2019-11-02 22:02 被阅读0次

项目总是从小到大慢慢发展的,最开始我们的项目代码架构可能就是一台代码运行的server+mysql+redis,随着用户越来越多,访问量越来越多,数据量越来越多,都会经历些神马。

1.单台mysql连接数不够用了:

一台mysql服务器会遇到
1.服务器磁盘空间不够:sharding(分片)策略,也就是水平扩容(分布式)
2.单台服务器对外提供服务时连接数不够:读写分离,布置集群
3.单表数据太大(亿)等问题,分库,分表,分区,迁移,冷热分离。。。

分析过程:

一般一开始应该是服务器数据量少,用户也少,然后慢慢的用户多了起来,并发了起来,数据量嗖嗖的增长起来,这个时候应该是先发生单库对方提供并发服务的能力不够,应为毕竟并发对数据库的拜访,特别是业务中的事物修改等行为,容易锁表造成等待,单库对外吞吐量不够,这时候虽然数据还不是很多,但也会出现瓶颈,应选择读写分离的纵向扩容策略,这一波瓶颈解决后应该能稳定一段时间了,这段时间数据库就可以稳定对外提供服务,并且不断累积数据,终于有一天由于某个业务记录数据到某表很频繁,此表数据积累已达千万级别,关于此表的sql都现慢查询,这个时候你可能需要定睛一下业务慢查询sql列表,以及分析业务,找出(或优化出)共同点,为此表创建必要索引,ok这一波慢查询又被你成功解决掉了,于是又成功渡过了一阵子,此表数据由千万级别,到达了上亿级别,io次数也虽数据量增多而增加,索引好像不怎么管用了,于是你在想如果此表数据没这么大不就啥事没有啦,于是你继续想,现在总共有A,B,C,D 4个这么大的表,其中A表也就最近10天的数据会被业务使用,其他的历史数据其实没啥作用的(至少目前是的),这个表完全可以采用冷热分离只保留今一个月的,其他数据都给我暂时搬去安全处就行啦。至于B表这个表就不好整了,此表光大就算了,而且历史数据还时不时存在修改的行为和根据本身各个字段进行where的条件刷选的行为,不过好在此表性格孤僻,跟其他的表没啥关联关系,于是思前想后mysql分片太搞人了,如果我把它给迁移到mongodb,mongodb的sharding部署起来可比mysql容易多了,毕竟人家是非关系型数据库,天生就支持分片,这样不就解决啦,以后随它变得有多大,加服务器就是啦,业务代码不需要变动,很是友好;再一个C表了,这个表数据量有进一步增长的趋势,但此表跟其他表不怎么关联,数据增长很热,历史数据不存在修改的行为,像极了日志增长行为(随时间会不停的增),业务中会经常对其发生搜索的行为,所以不能像A那样冷热分离它,也不能像B那样放到mongodb里面去(因为mongodb搜索可不是它的强项),突然想起来不是还有一个传说中的Elasticsearch么,太吻合了,果断把表C迁移至Es中。最后一个D表,此表目前数据量虽然挺大的,但是考虑到现在经费开始紧张起来啦(前面都部署了那么多了),然后这个表数据也不是太核心,对它产生的select也都是针对其主键的发生的,再一想这台mysql服务器刚把一大部分数据迁移到ES,mongodb,和专门备份普通大容量磁盘服务器中去了,现在我们的mysql磁盘又富裕起来啦,不如考虑下单表分区策略,根据主键来个range,分个10个或30个分区,单表数据除以分区数就不那么吓人了。

总结:

以上情景先后经历了,读写分离-》索引优化-》单表过大之冷热分离-》单表过大之mongodb迁移-》单表过大之ES迁移-》单表过大之分区。没谈分表,只是觉得分表这一步要慎重,慎重。。。然后最好别分表。。。垂直拆还好点,变一次,跟后面策略不冲突,水平拆就比较尴尬了,一定要想好,后面别变分的规则,当然管用也hai是很管用的。。。

参考文章:

MySql分表、分库、分片和分区知识
分布式与集群区别
mysql分布式部署
mycat中间件作用原理分析
mysql索引之b+tree
elasticsearch之logstash
mongodb分片思路分析
搞懂MySQL分区
mysql几种分区方式原理介绍
hash分区介绍

相关文章

  • 浅谈数据库数据增长后

    项目总是从小到大慢慢发展的,最开始我们的项目代码架构可能就是一台代码运行的server+mysql+redis,随...

  • 浅谈MongoDB数据库

    浅谈MongoDB数据库 Java操作MongoDB数据库简介MongoDB 介绍数据库安装MongoDB使用Mo...

  • 浅谈数据库中的知识发现

    浅谈数据库中的知识发现 前言:数据挖掘只是数据库知识发现中的一小部分内容,数据库中的知识发现是一个从数据集中发现知...

  • MyBatis入门实验(五)之主键自增长

    实验内容 设置数据库表为主键自动增长,在新增数据时不需要设置主键值,而依靠数据库的自动增长机制进行自动生成,新增完...

  • MySQL主从复制虽好,能完美解决数据库单点问题吗?

    一、单个数据库服务器的缺点 数据库服务器存在单点问题; 数据库服务器资源无法满足增长的读写请求; 高峰时数据库连接...

  • 精心总结--Oracle查询表空间的每日增长量和历史情况统计脚本

    11g统计表空间的每日增长量 12c统计表空间的每日增长量 估算oracle 数据库,数据库对象历史增长情况 最近...

  • 04.分布式系统id

    1. 数据库自增长序列或字段 最常见的方式。利用数据库,全数据库唯一。 优点: 1)简单,代码方便,性能可以接受。...

  • 浅谈数据库

    概念 什么是数据库 定义:数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 注意:误用导致混...

  • 浅谈数据库

    内容转载自我的博客 数据库介绍 数据库(Database)指的是以一定方式储存在一起、能为多个用户共享、具有尽可能...

  • 浅谈数据库优化

    浅谈数据库优化 在面试的时候经常会被问到数据库如何优化的?面试的时候最担心遇到这种宽泛的问题。如果你直接说:“建索...

网友评论

      本文标题:浅谈数据库数据增长后

      本文链接:https://www.haomeiwen.com/subject/kmphbctx.html