数据库调优——冷热分离

业务场景:

几千万数据量的工单表快速优化

数据库分区技术:

数据库分区并不是生成一个新的表,而是将表的数据均衡分配到不同的磁盘,系统或不同的服务器存储介质中,实际上还是一张表。业务代码不需要做任何改动。

数据库分区的优点: 比起单个文件系统或硬盘,分区可以存储更多的数据。 在清理数据时,可以直接删除废弃数据所在的分区。 可以大幅度的提升查询效率,类似于分库分表,比如说有2000万的数据,分成10个分区,每个分区就只有200万的数据,那么我查询的时候,也就只查这200万的数据。 数据库分区的缺点: 数据库分区有个限制,分区字段必须是唯一索引,也就是说我的所有的查询条件都得带上这个唯一索引,来告诉数据库,去查询哪个分区。而且这种方案更加依托于dba团队,又是将压力给到了数据库,所以这种方案基本上不使用。但是也有个好处就是,不需要引入其他框架,仅仅靠数据库就能实现。

冷热分离的简介:

热数据 热数据指的是需要即时对用户进行分发的数据,即从数据源抓取之后经过数据处理,需要即时存储到可快速分发的存储介质供API或直接面向用户的系统使用。 热数据需要重点保障服务质量和稳定性,为了保证数据的时效性,在数据处理上也是优先级高的数据。 冷数据 冷数据指的是不需要即时发给用户的数据。

这些数不会原样分发给用户,它们需要经过长期的积累,使我们可以从中得到基于此更高层次的分析。

冷热分离

冷热分离指的是在处理数据时将数据库分为冷库和热库,冷库指用于存放走到了终态的数据(冷数据)的数据库,热库用于存放还需要修改的数据(热数据)的数据库。

冷热分离就是在处理数据的时候,将数据分为冷库和热库,冷库存放到走到终态的数据,不经常使用的数据,热库存放还需要修改和经常使用的数据。

什么情况下我们可以使用冷热分离:

1,数据走到终态后,只有读的需求,没有写的需求,比如说订单走到终态,就不会再有状态变更。

2,用户能接受新旧数据分开查询,比如某些电商默认只让查3个月以内的订单,要想查询3个月以外的,就得访问其他的页面。也就是说不会出现同时查询冷、热数据的需求。

冷热分离的实现思路:

一、冷热数据都用mysql 需要考虑的问题: 1,怎么判断一个数据用冷数据还是热数据 一般情况下我们可以根据主表的字段来确定,比如说创建时间,状态。在我们使用的过程中,具体怎么区分冷数据和热数据,还得根据具体的业务需要、 2,如何触发冷热分离

触发冷热分离有三种方案

1,业务代码来实现。当表的数据变更时,每次变更都进行一次判断,看看能不能进入到冷库,如果能,就放到冷库,删除热库数据(实时性最强,改动最大)

2,通过监听mysql的binlog日志(低延迟)

3,通过定时任务,定时扫描,将能放到冷库的数据进行归档(高延时,不能做到实时性)

如何实现冷热分离

实现冷热分离就是判断数据是否能进入到冷库,如果能,插入冷数据,删除热数据,但是需要我们注意几点:

1,事务一致性问题:需要我们研发做好兜底方案。 最常用的就是加一个字段,用来标志数据是否可以进入到冷数据,然后定时任务每天去扫描看看数据是否一致。

2,数据量大的问题 可以采用批处理的方式,即一次性可以对多条数据进行处理

3,并发处理 当数据非常大的时候,采用批处理也达不到要求,就要采用多线程,这里要做好锁,可以用数据库锁来实现。

4,如何使用冷热分离 可以根据前端页面来区分

5,历史数据如何迁移 可以编写java程序来进行迁移,如果采用的是定时任务方案,不需要关注。

二、冷数据存放到hbase

Hbase: HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库,是Apache的Hadoop项目的子项目,是一个适合于非结构化数据存储的数据库。 上面第一期,冷热数据都用mysql,存在两个问题: 用户还是会存在查询冷数据的场景。并且用户在查询冷数据的时候依旧很慢。 那么就需要一种数据库,可以存放上亿的数据,并且支持简单的组合关键字查询,并且存放的数据不会在变更。所以我们采用hbase来实现。 hbase是一个天然支持分布式的非关系型数据库。mysql,pgsql,oracle:关系型数据库,不同表里的字段都有联系

优点:可以实现复杂的业务逻辑缺点:相比非关系型数据库性能会差一些非关系型数据库:redis,hbase,es;查询效率更高

缺点:不能实现复杂的业务逻辑

什么是非关系型数据库,什么是关系型数据库:

关系数据库:是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

简单说来就是关系型数据库用了选择、投影、连接、并、交、差、除、增删查改等数学方法来实现对数据的存储和查询。可以用SQL语句方便的在一个表及其多个表之间做非常复杂的数据查询。安全性高。

非关系型数据库:简称NOSQL,是基于键值对的对应关系,并且不需要经过SQL层的解析,所以性能非常高。但是不适合用在多表联合查询和一些较复杂的查询中。NoSQL用于超大规模数据的存储。

nosql和关系型数据库比较?

优点:

1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。

2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。

3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型(varchar等)。

4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。

缺点:

1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。

2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。

3)不提供关系型数据库对事务的处理。

冷热分离的弊端:

对业务要求非常高,要求冷热数据不能同时查询,冷数据不能被修改,冷数据不能进行复杂的查询,但是他的性价比非常高,可以快速的实现项目的优化。

相关推荐
wuyikeer44 分钟前
Spring Framework 中文官方文档
java·后端·spring
Victor3561 小时前
MongoDB(61)如何避免大文档带来的性能问题?
后端
Victor3561 小时前
MongoDB(62)如何避免锁定问题?
后端
wuyikeer2 小时前
Spring BOOT 启动参数
java·spring boot·后端
子木HAPPY阳VIP2 小时前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪
人间打气筒(Ada)2 小时前
如何基于 Go-kit 开发 Web 应用:从接口层到业务层再到数据层
开发语言·后端·golang
开心就好20252 小时前
使用Wireshark进行TCP数据包抓包分析:三次握手与四次挥手详解
后端·ios
用户4419395054873 小时前
OpenClaw服务器部署保姆级教程
后端
zdl6863 小时前
springboot集成onlyoffice(部署+开发)
java·spring boot·后端
Soofjan3 小时前
sync.Mutex讲解
后端