云上如何做冷热数据分离

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
对象存储 OSS,20GB 3个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 前言 随着业务的发展和持续运行,系统会产生大量的数据,数据的增长伴随而来的是对数据库的考验,在达到一定的数据量之后数据库的访问性能就会持续下降,为了系统的稳定运行,得要么提高数据库访问性能,要么把数据限定在一定的量上。前者会导致IT系统的不断投入,投入产出比不高,且早晚会达到系统的瓶颈,后者需要抛弃旧的数据,从历史数据的完整性上来说也是我们不愿意看到的。 如果暂时没有上分析性数据仓库的需求,那

前言

随着业务的发展和持续运行,系统会产生大量的数据,数据的增长伴随而来的是对数据库的考验,在达到一定的数据量之后数据库的访问性能就会持续下降,为了系统的稳定运行,得要么提高数据库访问性能,要么把数据限定在一定的量上。前者会导致IT系统的不断投入,投入产出比不高,且早晚会达到系统的瓶颈,后者需要抛弃旧的数据,从历史数据的完整性上来说也是我们不愿意看到的。

如果暂时没有上分析性数据仓库的需求,那么做冷热数据的分离就是一个比较好的解决办法。将热数据剥离开来,保证热数据的读写性能,冷数据相对来说访问量少,可以降低服务等级,这样就减少在IT方面因为数据量增长带来的投入。

如何区分冷/热数据

我们一般有两种方式来区分冷热数据:
  • 按数据创建时间:一般情况我们会使用数据的创建时间来区分数据冷热,按常理说越久时间前创建的数据访问越少,这对于交易类数据很明显,很可能一周内某笔交易会被频繁查询,一个月内也许只是偶尔查询,三个月后可能在极偶然的情况下才会被用到,有可能绝大多数数据在几个月后再也不会被访问到。
  • 按访问热度:有些数据访问频度并非按时间,比如某个热门文章也许发表一年之后还会有大量的人访问,新发表的文章反而很少有人浏览。或者某个事件会引发某些很少阅读的文章或者信息在某一个时间段突然大量的被访问到,这样冷数据也会变成热数据。这个时候再按时间区分就不科学了,需要按业务情况、数据规律来区分冷热。
本文主要讨论前一种情况的冷热数据分离,对于后一种情况,要结合业务来处理,很难有普适的方案。

冷数据的特点

  • 数据量大:冷数据要求保存较长时间甚至所有时间的,这可能是热数据的数十倍到数百倍的数据量。
  • 业务场景简单:只需要读取指定的数据即可,一般不会有复杂的查询。写入、删除都会批量处理,基本没有更新操作。
  • 性能要求不高:不像一般应用要求查询数毫秒到数秒内返回,冷数据的查询可以容忍数十秒甚至更长时间才出结果,甚至可以做到异步处理,启动一个任务然后等待结果。
  • 成本敏感:因为数据量庞大且访问频度低,不适合大量的投入。

冷数据的处理

对于冷数据,根据不同的应用场景建议使用不同的方式来处理。

场景一:极低频度的查询

通常数据只是备份,但在偶然的情况下需要查询指定的数据,这种查询有可能数天到数月才发生一次。

对于这种情况,推荐直接使用oss来存储冷数据,然后在需要查询的时候启动运行一个RDS实例并导入数据,查询完成后销毁RDS实例,此方案优点是成本非常低,但在使用的时候会比较繁琐。

下面以RDS MySQL版为例来说明如何处理。

冷数据备份

启动一个ECS,在其上部署定时任务,任务步骤包括:
  • 使用mysqldump命令导出指定时间段的数据:mysqldump -h hostname -u username -p password tablename > dbname-tablename-年月日时分秒.sql –where querystatement
  • 打包上传备份数据到oss
  • 备份完成后删除RDS中已备份的数据(注意非drop或者truncate命令删除的数据,可能需要定期执行optimize table命令来释放空间)

使用冷数据

  • 启动一个RDS按量实例
  • 登录ECS,从oss下载指定时间的备份包
  • 执行数据恢复命令,如:mysqldump -h hostname -u username -p password -h host tablename < xxx.sql
  • 登录控制台DMS或者MySQL客户端,查询数据
  • 释放MySQL实例

场景二:需要经常查询

冷数据经常被查询,比如每天不同时间段都有人在查询数据,这个时候如果每次查询都重复启动数据库或者导入数据的操作就太过繁琐,此时建议以下两个方案备选(下面也都以RDS MySQL版为主数据库来做示例)。

方案一:冷热RDS

建立冷/热数据库,热库仅保留短时间的数据,超出的数据定时批量移到冷库中。应用系统内部做好区分,热数据可以直接通过应用系统访问,如果需要访问冷数据则需要走冷库查询。

热库面对大量的高频查询写入请求,因此配置高规格的RDS,冷库的数据查询频率一般非常低,可以配置低规格的RDS并提供大存储容量。例如对某种应用热RDS使用8核16G内存200G磁盘空间的话,那么根据冷数据访问的频度和性能要求,冷RDS可以用1核2G、2核4G内存等低规格的实例,并提供最大到2T的存储空间。

冷热RDS方式部署简单,但数据库存储在RDS的内部存储上,成本还是相对比较高。另外单个RDS还是有磁盘空间上限的限制,最高只能到2T。如果想要降低成本或者需要更高的存储空间,除了采用分布式数据库外(分布式数据库成本也会比较高),可以考虑用以下另一种方式。

方案二:冷数据转存RDS PostgreSQL版 + OSS

冷数据从RDS MySQL版转存到RDS PostgreSQL版上,并用oss_ext扩展插件把数据以外部表的方式存入oss,使用oss的低廉成本和无限空间的特性来存储大量的冷数据,并且可以通过PostgreSQL直接查询。

准备工作

  • 创建RDS PostgreSQL版实例,选择合适的实例规格
  • 创建oss插件:create extension oss_fdw;
  • 创建 server :create server ossserver foreign data wrapper oss_fdw options (host 'oss-cn-hangzhou.aliyuncs.com' , id 'xxx', key 'xxx',bucket 'mybucket');
  • 在PostgreSQL中创建数据表(数据列是示例):create table example (date text, time text, open float, high float, low float, volume int);

转储冷数据

运行一个ECS,在上面部署定时任务,任务包括以下内容:

  • 导出数据到csv文件中:mysql -B -u username -p password database -h dbhost -e "SELECT * FROM xxxtable;" \ | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > example.csv
  • 上传csv文件到oss中
  • (此步骤也可以在查询时候做)在PostgreSQL中创建oss外部表:CREATE FOREIGN TABLE oss-data-xxx (date text, time text, open float,high float, low float, volume int) SERVER ossserver OPTIONS ( filepath 'osstest/example.csv', delimiter ',' ,format 'csv', encoding 'utf8', PARSE_ERRORS '100');
  • 删除RDS中数据(注意非drop或者truncate命令删除的数据,可能需要定期执行optimize table命令来释放空间)

查询冷数据

  • 装载外部表中数据到数据表:insert into example select * from ossdata-xxx;
  • 查询数据表
  • 查询完后清除数据表中数据(PostgreSQL实例本身存储容量有限),预留空间给其他查询使用

总结

本文提供了三种冷热数据分离的方案,可以根据应用系统的特征和需求选取其中一种,也可以对系统中的不同数据使用不同的方案,甚至对于不同时间段的同样数据使用多种方案,比如短期的冷数据可能还会有一定的访问,可以使用冷热RDS方式,长期基本不怎么访问的冷数据直接导出放到oss上,可以进一步提高灵活性和降低使用成本。

<<完>>
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 SQL 分布式计算
TiDB整体架构概览:构建高效分布式数据库的关键设计
【2月更文挑战第26天】本文旨在全面概述TiDB的整体架构,深入剖析其关键组件和功能,从而帮助读者理解TiDB如何构建高效、稳定的分布式数据库。我们将探讨TiDB的计算层、存储层以及其他核心组件,并解释这些组件是如何协同工作以实现卓越的性能和扩展性的。通过本文,读者将能够深入了解TiDB的整体架构,为后续的学习和实践奠定坚实基础。
|
7月前
|
存储 关系型数据库 MySQL
数据架构:数据冷热分离实践思考
本篇分析了几个冷热分离的实现案例,并整理了一些问题和解决方案。通过mysql 和 Es的两种冷热分离实现,阐述了不同存储方案上冷热分离实现上的共同点和差别。回归本源,设计最终还是依赖于具体业务需求。后续还需要在实践中,通过足够的业务场景和数据量级支撑,来继续验证方案的可行性和潜在问题,不断进行完善升级。
514 0
|
7月前
|
存储 SQL 关系型数据库
数据架构:概念与冷热分离
关于架构,大家都有了解和理解。通常一个业务或项目,在做架构设计时,可能会包含业务架构和技术架构。其中技术架构是我们作为开发角色,在做设计时重点的工作内容。但还有架构类型的划分方式,会包括业务架构、技术架构、数据架构和应用架构四种。
146 0
|
7月前
|
存储 数据库 开发者
单元化架构的设计原则:让开发者、组件和数据都能透明化,同时保证业务可分片和业务自包含。
单元化架构的设计原则:让开发者、组件和数据都能透明化,同时保证业务可分片和业务自包含。
|
8月前
|
消息中间件 大数据 关系型数据库
|
10月前
|
存储 数据采集 分布式计算
数据湖架构的优势与挑战:数据存储和分析策略
随着大数据时代的到来,数据湖架构逐渐成为许多企业进行数据存储和分析的首选方案。数据湖是一种用于存储大量原始和结构化数据的中心化存储库。在本文中,我们将深入探讨数据湖架构的优势和挑战,并介绍一些常见的数据存储和分析策略。
324 0
|
11月前
|
存储 IDE 数据可视化
【架构治理】在代码存储库中记录软件架构
【架构治理】在代码存储库中记录软件架构
|
数据采集 存储 大数据
遵循4个构建数据架构的原则将加速企业数据策略实现
数据架构的好坏取决于它的基本原则。如果没有正确的目的、标准和通用的语言,企业的策略很难付诸实施。
遵循4个构建数据架构的原则将加速企业数据策略实现
|
存储 缓存 固态存储
ES冷热分离架构设计:一招让你的ELK日志系统节省 50% 的硬盘成本
ES冷热分离架构设计:一招让你的ELK日志系统节省 50% 的硬盘成本
ES冷热分离架构设计:一招让你的ELK日志系统节省 50% 的硬盘成本
|
存储 SQL 算法
1/20的成本!PolarDB-X冷热分离存储评测
本文将对多款数据库产品的压缩能力进行测评对比,并展示其背后的设计原理。
1/20的成本!PolarDB-X冷热分离存储评测