目录(?)[-]

  1. 前言
  2. 如何区分冷热数据
  3. 冷数据的特点
  4. 冷数据的处理
    1. 场景一极低频度的查询

      1. 冷数据备份
      2. 使用冷数据
    2. 场景二需要经常查询
      1. 方案一冷热RDS
      2. 方案二冷数据转存RDS PostgreSQL版 OSS
        1. 准备工作
        2. 转储冷数据
        3. 查询冷数据
  5. 总结

前言

随着业务的发展和持续运行,系统会产生大量的数据,数据的增长伴随而来的是对数据库的考验,在达到一定的数据量之后数据库的访问性能就会持续下降,为了系统的稳定运行,得要么提高数据库访问性能,要么把数据限定在一定的量上。前者会导致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上,可以进一步提高灵活性和降低使用成本。

<<完>>

来源:http://blog.csdn.net/bieleyang/article/details/77252413

云上如何做冷热数据分离相关推荐

  1. mysql 冷热数据分离_elasticsearch冷热数据读写分离

    Elasticsearch5.5冷热数据读写分离 前言 冷数据索引:查询频率低,基本无写入,一般为当天或最近2天以前的数据索引 热数据索引:查询频率高,写入压力大,一般为当天数据索引 当前系统日志每日 ...

  2. Shopee ClickHouse 冷热数据分离存储架构与实践

    本文首发于微信公众号"Shopee技术团队". 摘要 Shopee ClickHouse 是一款基于开源数据库 ClickHouse 做二次开发.架构演进的高可用分布式分析型数据库 ...

  3. 关于redis的冷热数据分离

    一.概述 当前KV数据库从存储介质可以分为两种模式,一种是以内存为主持久化为辅,如memcache(无持久化).redis等:一种是以持久化为主内存为辅,如ssdb(基于leveldb/rocksdb ...

  4. 文件服务器冷热数据划分,游戏服务器冷热数据分离方案

    冷热数据分离 当前场景: gamserver启动时,会将所有数据加载到内存中,提高读取数据的性能.但是有很多数据很可能是不常用甚至再也用不到的数据,将这些数据加载到内存中需要占用更多的内存,极大的浪费 ...

  5. (六)大白话MySQL是如何基于冷热数据分离的方案,来优化LRU算法?

    (一)大白话MySQL执行SQL的流程 (二)大白话InnoDB存储引擎的架构设计 (三)大白话MySQL Binlog是什么? (四)MySQL的Buffer Pool内存结构 (五)MySQL的B ...

  6. 加快打造“云上贵州”,靠大数据实现“后发赶超”

    "把大数据作为全省弯道取直.后发赶超的战略引擎,充分挖掘利用其商业价值.管理价值.社会价值,以大数据提升政府治理能力,引领产业转型升级,服务广大社会民生,带动大众创业.万众创新." ...

  7. MySQL基于冷热数据分离优化的LRU刷盘策略

    MySQL基于冷热数据分离优化的LRU刷盘策略 前言 对于计算机刷盘这个概念相信大家都非常熟悉了,刷盘策略,其实在操作系统层面来说的话就是页面置换算法. 不知道各位朋友们还记得页面置换算法有哪些吗? ...

  8. 大数据归档-冷热数据分离

    1. 什么是TokuDB? TokuDB 是一个支持事务的"新"引擎,有着出色的数据压缩功能,由美国 TokuTek 公司(现在已经被 Percona 公司收购)研发.拥有出色的数 ...

  9. “云上贵州”建立大数据灾备中心

    12月1日,贵州省大数据发展管理局将云上贵州大数据灾备服务中心授牌给中国电信贵州公司. 今年8月,由中国电信承建的云上贵州系统平台贵安节点提前开通,为促进我省政府数据的聚集.融通.应用,打赢省委省政府 ...

最新文章

  1. Stream、WshShell、WshUrlShortcut对象及Shell.Application的参数与使用
  2. 1X1 convolution layers
  3. Javaweb 项目内所有页面都是404问题
  4. JAVA基础——Java 中必须了解的常用类
  5. 利用 USB转485通过Wireshark抓取MSTP数据
  6. 6.计蒜客ACM题库.A2011 Magic Mirror
  7. 透析极大极小搜索算法和α-β剪枝算法(有案例和完整代码)
  8. 王者荣耀AI绝悟完全体对战开启:英雄随便选,论文已被NeurIPS收录
  9. ESP8266——入门:点亮TFT液晶屏(五)
  10. 易腐食品行业调研报告 - 市场现状分析与发展前景预测
  11. 【整理归纳】Linux中文件的Access,Modify,Change区别
  12. 【2022修复版】社群扫码进群活码引流完整运营源码/对接免签约支付接口/推广正常绑定下级/带视频搭建教程
  13. UVM:7.5.2 常用操作及其对期望值和镜像值的影响
  14. 高情商的王维注解了低政商孟浩然的后半生
  15. 试用与非门和异或门设计一个组合逻辑电路来判断输入的四位二进制数能否被5整除(0可被5整除), 若可被整除则输出F=1, 否则F=0(山东大学二〇二〇年数字电路906综合题第4题)(全网第一手资料)
  16. 哪项操作可以用来关闭linux防火墙,linux防火墙怎么关
  17. lyapunov函数 matlab,科学网-[转载]Matlab的Lyapunov、Sylvester和Riccati方程的Matlab求解-吴雄君的博文...
  18. 当当网java项目_基于S2SH框架开发当当网项目
  19. 【转】HTTP 协议详解
  20. 【经典控制理论】自控实验总结

热门文章

  1. 13.7.深入理解jstack日志
  2. CSS中控制不换行属性
  3. Oracle:闪回,闪回表,闪回删除,闪回版本查询,闪回事务查询
  4. 自定义例外:当没有查询到员工信息时,抛出例外
  5. [Leetcode] Sqrt(x)
  6. 好用的wordpress主题
  7. 5.与HTTP协作的Web服务器
  8. 学习css3中的动画
  9. Effective C++ 条款47
  10. Mybatis笔记一:java.lang.NoClassDefFoundError: org/apache/ibatis/mapping/DatabaseIdProvider