数据库调优--冷热分离

2023-11-09 20:30
文章标签 分离 数据库 调优 冷热

本文主要是介绍数据库调优--冷热分离,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

业务场景:

数据库分区技术:

数据库分区的优点:

缺点:

冷热分离的简介:

热数据

冷数据

冷热分离

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

冷热分离的实现思路:

一、冷热数据都用mysql

        需要考虑的问题:

二、冷数据存放到hbase

Hbase:

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

nosql和关系型数据库比较?

冷热分离的弊端:


业务场景:

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

数据库分区技术:

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

数据库分区的优点:

  • 比起单个文件系统或硬盘,分区可以存储更多的数据。
  • 在清理数据时,可以直接删除废弃数据所在的分区。
  • 可以大幅度的提升查询效率,类似于分库分表,比如说有2000万的数据,分成10个分区,每个分区就只有200万的数据,那么我查询的时候,也就只查这200万的数据。

缺点:

        数据库分区有个限制,分区字段必须是唯一索引,也就是说我的所有的查询条件都得带上这个唯一索引,来告诉数据库,去查询哪个分区。而且这种方案更加依托于dba团队,又是将压力给到了数据库,所以这种方案基本上不使用。但是也有个好处就是,不需要引入其他框架,仅仅靠数据库就能实现。

冷热分离的简介:

热数据

        热数据指的是需要即时对用户进行分发的数据,即从数据源抓取之后经过数据处理,需要即时存储到可快速分发的存储介质供API或直接面向用户的系统使用。

        热数据需要重点保障服务质量和稳定性,为了保证数据的时效性,在数据处理上也是优先级高的数据。

冷数据

        冷数据指的是不需要即时发给用户的数据。

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

冷热分离

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

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

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

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

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

冷热分离的实现思路:

一、冷热数据都用mysql

        需要考虑的问题:

1,怎么判断一个数据用冷数据还是热数据

一般情况下我们可以根据主表的字段来确定,比如说创建时间,状态。在我们使用的过程中,具体怎么区分冷数据和热数据,还得根据具体的业务需要、

2,如何触发冷热分离

触发冷热分离有三种方案

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

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

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

3,如何实现冷热分离

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

1,事务一致性问题:需要我们研发做好兜底方案。

        最常用的就是加一个字段,用来标志数据是否可以进入到冷数据,然后定时任务每天去扫描看看数据是否一致。

2,数据量大的问题

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

3,并发处理

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

4,如何使用冷热分离

        可以根据前端页面来区分

5,历史数据如何迁移

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

二、冷数据存放到hbase

Hbase:

        HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库,是Apache的Hadoop项目的子项目,是一个适合于非结构化数据存储的数据库。

上面第一期,冷热数据都用mysql,存在两个问题:

        用户还是会存在查询冷数据的场景。并且用户在查询冷数据的时候依旧很慢。

        那么就需要一种数据库,可以存放上亿的数据,并且支持简单的组合关键字查询,并且存放的数据不会在变更。所以我们采用hbase来实现。

        hbase是一种天然支持分布式的数据库,因为他是非关系型数据库,每个表之间都没有实际的联系,hbase同一行的数据没有存放到一起,所以hbase只能做一些简单的查询,实现不了复杂的查询。

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

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

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

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

nosql和关系型数据库比较?

优点:

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

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

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

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

缺点:

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

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

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

冷热分离的弊端:

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


这篇关于数据库调优--冷热分离的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/378297

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 数据库表与查询操作实战案例

《MySQL数据库表与查询操作实战案例》本文将通过实际案例,详细介绍MySQL中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手,感兴趣的朋友跟随小编一起看看吧... 目录mysql 数据库表操作与查询实战案例项目一:产品相关数据库设计与创建一、数据库及表结构设计二、数据库与表的创建项目二:员

Java慢查询排查与性能调优完整实战指南

《Java慢查询排查与性能调优完整实战指南》Java调优是一个广泛的话题,它涵盖了代码优化、内存管理、并发处理等多个方面,:本文主要介绍Java慢查询排查与性能调优的相关资料,文中通过代码介绍的非... 目录1. 事故全景:从告警到定位1.1 事故时间线1.2 关键指标异常1.3 排查工具链2. 深度剖析: