冷数据归档(历史库),成本与性能如何兼得?| OceanBase应用实践

news2024/11/25 12:38:37

随着数据量的迅猛增长,企业和组织在数据库管理方面遭遇的挑战愈发凸显。数据库性能逐渐下滑、存储成本节节攀升,以及数据运维复杂性的增加,这些挑战使得DBA和开发者在数据管理上面临更大的压力。

为了应对这些挑战,对数据生命周期实施更为细致的管理变得至关重要。这包括从在线处理到近线存储,再到归档整理,直至数据销毁的整个生命周期管理。在这一系列阶段中,近线阶段和归档阶段的历史库管理显得尤为重要。本文将深入探讨如何对历史库进行现代化架构升级,并重点聚焦于OceanBase如何帮助企业优化数据库历史库管理

一、构建满足现代需求的数据库

历史数据存储在近线和归档阶段都发挥着重要作用。在归档阶段,可采用数据库或离线文件的形式。而对于仍需进行少量查询的归档数据,则通常选择历史库方案。历史库方案实际上是实现冷热数据分离的策略,通过减轻在线库负担来提升其性能。历史库的冷数据通常具有低频访问的特点,所以可以选择磁盘空间较大、CPU 配置较低的机型,以实现成本节约的目的。

历史库的引入给数据库管理系统带来了新的挑战,我们对此的理解主要来自于用户对数据管理解决方案的迫切期待。在与用户的交流中,我们发现许多用户迫切需要一种能够有效处理大规模历史数据的解决方案,同时希望在降低成本的同时不影响性能和数据可用性。这些反馈深刻地影响了我们对历史库的理解。因此,我们期望历史库能够具备以下特点:

○   大容量的存储空间,支持大量数据的存储和在线库数据高效持续导入。

○   具备良好的可扩展性,能够处理不断增加的数据量而无需调整存储架构。

○   提供更低的存储成本,以更少的磁盘空间和更经济的存储介质存储更多数据。

○   提供一定的查询能力,支持高效的少量事务型查询,同时也能够支持高效的分析型查询。

○   对应用和在线库保持相同的访问接口,降低应用复杂度。

当面对这些需求时,OceanBase 成为一种天然的选择。其具备良好的单机分布式扩展能力和 HTAP 混合负载处理能力,使其能够高效地支持业务系统的在线库和历史库场景。更为重要的是,OceanBase 在满足业务需求的同时,能够至少降低一半的存储成本。据部分客户反馈,将业务历史库从其他数据库迁移至 OceanBase 后,存储成本可降低 80%左右,这也是许多用户在历史库场景选择 OceanBase 的主要原因之一。

1718801657

图 1:OceanBase 历史库产品架构

随着历史库产品架构的设计,我们进一步思考历史库的存储架构问题。

首先,关于历史库的数据库架构是否需要与在线库保持一致的问题,我们认为不需要。在线库可能出于数据规模和性能的需要,采取分库分表等架构,但历史库的性能要求通常较低。分库分表架构对数据库的部署运维、备份恢复都带来额外的成本。特别是采用 OceanBase 作为历史库时,单表轻松承载几十 TB 的数据规模,即使数据规模很大也可以采用分区表。

其次,关于历史库是否应该支持数据更新的问题,技术上是可行的,历史库可以支持更新,也可以设定为只读。然而,从历史库整体成本的角度考虑,我们建议尽量采用只读历史库的方案。只读历史库随机读写更少,可以使用更廉价的存储硬件,如 SATA 盘而不是 SSD。此外,只读历史库也降低了历史库自身的备份成本,只需要维护一份备份副本。

最后,对于数据归档应尽可能减少对在线库的影响的问题,这是非常重要的。在线库是企业业务持续稳定运行的关键,在数据规模较大的场景下,大批量数据的读取、计算、删除会给在线库造成压力,因此数据归档过程必须能够保障在线库的稳定性。

二、OceanBase 数据归档的核心能力

(一)冷热数据分离,提升在线库性能

通常情况下,一部分业务数据在一段时间后就很少被访问或者不再被访问(我们称之为“冷”数据)。解决思路是将访问频率较低的“冷”数据归档到历史库中,而在线库则只保留最近某一段时间的数据。

传统的数据归档方式常常需要耗费大量的时间和人力,并且存在操作错误、数据丢失等风险。此外,手动归档操作的繁琐性也限制了数据管理的效率和工作的灵活性。面对这些问题,ODC 从 4.2.0 版本引入了数据归档功能,旨在解决数据管理中的难题,提高工作效率和数据安全性。下面,我们将使用 ODC 的数据归档功能来实现这一冷热数据分离的过程:

(二)新建「数据归档」工单

在 ODC 中,点击「工单」-> 「新建工单」-> 「数据归档」,进入数据归档工单的创建页,填写工单详情。这里我们配置了 tb_order 表从在线库到历史库的归档任务,勾选了归档完成后清理源端已归档数据。注意这里使用了变量 archive_date,其值设置为当前时间往前偏移 1 年,通过在过滤条件中引用变量的方式,可以实现每次执行归档任务都归档 1 年前的数据。

1718801804

图 2:新建数据归档任务

ODC 数据归档支持多种执行调度策略,可以立即执行、指定时间执行,也可以周期执行。还支持配置结构同步、数据插入策略和限流策略。结构同步时可根据需要选择是否同步分区和索引,因为历史库可能会和在线库有不同的分区设计,历史库和在线库的查询需求也不一样也可以通过更少的索引进一步降低存储成本。

1718801857

图 3:数据归档任务设置

点击新建任务,会显示归档 SQL 的预览,进一步确认需要归档的数据范围。

1718801891

图 4:数据归档 SQL 预览

可以看到,通过 ODC 数据归档任务,只需简单配置,就可以成功地将冷数据从在线库归档到了历史库,实现了在线库的冷热数据分离。那么我们完成这个过程就足够么,如果我们因为业务变动或误操作,需要将已归档到历史库的数据恢复到在线库又该如何处理呢?新建一个反向归档任务不可谓不行,但我们既要花费精力重新配置新任务,又要担心配置错误引入问题。ODC 已经为用户考虑到了这一点,提供了一键回滚功能。我们以刚才的任务为例,现在需要将已经归档的数据回滚到在线库,我们仅需要在执行记录页,点击数据归档任务记录后的回滚按钮,即可发起归档回滚任务。

1718801937

图 5:数据归档执行过程

(三)过期数据清理,降低存储成本

ODC 的数据归档功能来实现在线库的冷热数据分离,将冷数据迁移到历史库,以达到降低成本、提高效率的目的。然而,你可能会问,历史库难道不需要成本吗?地主家也没有余粮啊。

实际上,一旦业务的冷数据进入历史库,它并不一定需要永久保留。在经过一段时间后,部分冷数据可能会处于“过期”状态,完全不会再被使用,比如日志型数据。如果能及时清理掉这些过期数据,那么我们的存储成本会进一步降低。为了解决这个问题,ODC 提供了数据清理功能定期清理数据库中的过期数据,从而进一步优化存储资源的利用。

(四)新建「数据清理」工单

在 ODC 中,点击「工单」-> 「新建工单」-> 「数据清理」,进入数据清理工单的创建页,看到这个页面是不是非常熟悉,数据清理工单的配置与数据归档工单基本一致,这里我们不再赘述,直接创建一个周期性清理的工单。ODC 数据清理也支持联动历史库做清理前的数据校验。

1718801997

图 6:新建数据清理任务

(五)端到端的数据归档链路

截止 ODC v4.3.0 版本,ODC 数据归档支持以下链路:

○   OceanBase MySQL 在线库到 OceanBase MySQL 历史库 。

○   OceanBase Oracle 在线库到 OceanBase Oracle 历史库。

○   MySQL 在线库到 MySQL 历史库。

○   MySQL 在线库到 OceanBase MySQL 历史库。

○   MySQL 在线库到 OceanBase MySQL 历史库。

ODC 的产品形态包括:

○   私有云 WEB 版,私有云版本既可以连接 OceanBase 社区版、企业版,也支持连接 OB Cloud 云数据库。

○   OB Cloud 云服务,ODC 数据归档能力同时也在 OB Cloud 云控制台提供,购买 OB Cloud 云数据库的用户可以直接使用。

三、OceanBase 数据归档的核心技术

为了实现数据归档过程的稳定、快速、准确、适合大规模数据场景,ODC 数据归档引入了多维度限流、分片并行、数据校验、断点恢复等技术。以下为数据归档的技术架构,主要包含三个组件:

○   Worker(任务执行器,负责执行任务的具体逻辑)

○   MetaDB(用于存储任务的元数据信息,采用 OceanBase 来保证高可用)

○   ODC Console(用户操作的入口,用于任务的发布与管理)。

1718802126

图 7:数据归档技术架构

(一)多维度限流机制,保障在线库稳定运行

ODC 数据归档采用了主动限流和被动限流的双重策略,以最大程度保障在线库的性能稳定性。

主动限流涵盖了流量限制和行数限制,针对读操作和写操作进行计算和限制。流量限制的目的是避免过大的流量对网卡造成过载或过快的速度导致 CPU 和 IO 资源耗尽。数据行数限制的目的是防止产生过多的 RPS,可能会对 DRC 产生影响。

被动限流是在任务执行过程中,ODC 持续监控数据源的 CPU 和内存占用情况。当 CPU 和内存达到预设的阈值时,会让任务执行器进入休眠状态,直到监控指标满足任务执行标准后再继续执行。这种策略可以有效控制资源的使用,确保任务执行在合适的条件下进行。

(二)分片并行,实现高性能归档

数据规模越来越大,数据归档过程需要尽可能高效。为了提升数据归档性能,我们在对目标表进行处理时采用了基于主键的分片策略。这样可以将需要归档的数据拆分成多个较小的子任务,并交由多个线程并发处理。通过并行处理,我们能够更高效地完成数据归档操作。

(三)先校验再删除,确保历史数据可信

数据库是一致性的最终保障,即便是历史库,也必须保障历史数据的有效性和完整性。当前 ODC 的数据归档任务在清理在线库数据时还提供了一层一致性校验保障,在删除数据前,ODC 会拉取在线库和历史库的数据进行对比,只有满足一致性策略的数据才会被允许删除,确保不会出现数据丢失的风险。当前数据一致性校验策略是通过全量字段等值比较,只有当在线库和历史库数据完全一致时,ODC 才会允许并删除在线库的数据。类似于数据迁移,数据删除也会进行防导爆控制,以保证系统的稳定性。

(四)断点恢复,满足大数据规模场景诉求

在大数据规模场景,当任务出现意外停机时或需要手动中止任务时,重新开始任务的成本通常难以接受,所以必须能够满足大规模数据量场景下归档可靠性。

ODC 数据归档提供了断点恢复能力,它可以从最近的断点记录处快速恢复任务。实现原理基于归档表的分片处理,每个子任务都会保留一个滑动窗口,每个事务行组在生成后都会被放到滑动窗口中,由于子任务的数据读取线程是单线程,所以这些事务行组在滑动窗口的顺序是和生成的顺序一致;每个事务行组在消费完成之后,会被标记成功,此时如果滑动窗口最开头的任务是完成的,那么会进行一次窗口“移动”,直到滑动窗口最前面的任务是未完成的状态。每次随着窗口移动,移出去的那个事务行组的最后一行就成为了一个断点。对于每一个运行中的子任务,它的断点信息都会被定期汇报到数据库中。当这个任务由于某种原因退出时,其他节点可以继续跑这个任务,在重跑任务时会从数据库中获取到每个子任务的断点信息,从断点的位置开始继续运行。对于子任务生成线程,也有类似的断点续传机制。

四、真实应用场景下的历史库案例

目前已有超过 100 家用户通过 OceanBase 进行历史库架构升级,包括支付宝、携程、怪兽充电、网商银行等客户,取得了显著成效。

支付宝通过 OceanBase 进行历史库架构升级,实现 PB 级数据归档和横向无限扩展,整体存储成本下降 1/3,总体数据存储成本减少 80%。截至目前,支付宝已建立了 20 多个历史库集群,涵盖交易、支付、充值、会员、账务等几乎所有核心业务,总数据量达到 95 PB,每月新增 3 PB。其中,最大的交易支付集群组数据量达 15 PB,每日数据增量可达 50 TB。这项历史库升级为支付宝带来了显著收益:

○  成本显著降低:历史库采用成本更低的 SATA 盘来搭建 OceanBase 数据库集群,单位空间磁盘成本降低到线上机器的 30%。同时,使用更高压缩比的 zstd 压缩算法,总体成本下降 80%。如果线上数据库是 MySQL、Oracle 等传统数据库,成本降低更为显著,因为 OceanBase 的数据编码、压缩及 LSM-Tree 存储架构使存储成本仅为传统数据库的三分之一。

○  弹性伸缩降低运维成本:历史库采用 OceanBase 三副本架构,每个 zone 中有多个 OBServer,通过分区将数据分散到多个 unit。OceanBase 具备业务无感知的弹性伸缩能力,可以通过扩容节点增加容量和性能。这意味着历史库不再受限于磁盘大小,少数集群即可涵盖所有业务历史库,降低了运维成本。

○  数据强一致和快速故障修复:数据迁移相当于数据归档及逻辑备份,对于需要审计和历史数据查询的金融业务来说,数据一致性至关重要。OceanBase 底层使用 Paxos 一致性算法,当单台 OBServer 宕机时,可以在 30 秒内快速恢复并保证数据强一致,减少对线上查询及归档任务的影响。

此外,网商银行通过 OceanBase 历史库方案节省超过 1000 万的硬件成本。携程通过 OceanBase 历史库方案,相比之前使用 MySQL 的方案降低 85% 的存储成本。怪兽充电将历史库迁移到 OceanBase 后,存储成本下降 71%。

五、写在最后

自 2023 年 8 月发布以来,ODC 的数据归档和清理功能已广泛应用于 OceanBase 企业版、社区版等私有化部署场景以及 OB Cloud 云上场景,获得了众多用户的认可和产品功能反馈。过去十个月里,ODC 团队不断打磨产品,持续增强并改进产品功能,为用户提供更加优质的使用体验。

未来,ODC 将继续推出新功能,提高产品的稳定性和易用性,帮助用户更好地管理数据库。以下是 2024 年数据归档和清理产品的路线图,涵盖已发布的关键特性和下半年规划的重要特性。ODC 现已开源,我们期待与用户共同打造更加高效易用的历史库及数据归档能力。

1718802332

图 8:数据归档产品路线图

ODC 是一款开源的企业级数据库协同开发工具,获取源码及更多详情,请访问 ODC GitHub 仓库。


OceanBase 云数据库现已支持免费试用,现在申请,体验分布式数据库带来全新体验吧 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2035879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vulnstack-5

环境搭建 靶场虚拟机共用两个,一个外网一个内网,用来练习红队相关内容和方向,主要包括常规信息收集、Web攻防、代码审计、漏洞利用、内网渗透以及域渗透等相关内容学习。 虚拟机密码 win7 sun\heart 123.com sun\Administrator dc123.com # …

华为软件测试笔试真题,赶快收藏

软件测试工程师笔试题目 一.填空 1、 系统测试使用( C )技术, 主要测试被测应用的高级互操作性需求, 而无需考虑被测试应用的内部结构。 A、 单元测试 B、 集成测试 C、 黑盒测试 D、白盒测试 2、单元测试主要的测试技术不包括(…

【nvidia-smi】Failed to initialize NVML: Driver/library version mismatch

服务器更新后,输入nvidia-smi出现如下报错: 解决方法参考: 已解决【nvidia-smi】Failed to initialize NVML: Driver/library version mismatch解决方法-腾讯云开发者社区-腾讯云 (tencent.com) 输入命令查看nvidia驱动的版本号&#xff1a…

Linux软件包yum

目录 Linux软件包管理器 yum关于rzsz注意事项查看软件包如何安装软件卸载命令 Linux开发工具Linux编辑器-vim使用1. vim的基本概念2. vim的基本操作3. vim正常模式命令集4. vim末行模式命令集5. vim操作总结 小彩蛋 Linux软件包管理器 yum 软件包 在Linux下安装软件&#xff…

java基础学习笔记2(8.9)

String equals比较堆里值 字符串比较用str1.equals(str2); 比较栈里的值 JDK7以后字符串常量池进入了堆里面。 在Java中,StringBuffer 和 StringBuilder 是用于创建可变字符串的类。它们提供了比 String 更高效的字符串操作,尤其是在需要…

ICM-20948芯片详解(13)

接前一篇文章:ICM-20948芯片详解(12) 六、寄存器详解 2. USER BANK 0寄存器详述 (60)FIFO_COUNTH 高5位,计数表示FIFO中写入的字节数。 (61)FIFO_COUNTL 低8位,计数表…

IMAX ENHANCED认证的护眼三色激光投影仪,选极米 RS 10 Pro把专业IMAX影院带回家

对于追求大屏体验的用户来说,智能投影仪有着电视机无法比拟的优势。因此,智能投影仪如今也逐步替代传统电视机,成为了许多家庭的必备家电之一。对于当代年轻人而言,无论是追剧、看电影还是打游戏,大屏幕都始终比传统电…

西部数据拒绝2.62亿美元巨额赔偿:硬盘专利侵权案将上诉

西部数据(Western Digital,简称WD)被加州的一个陪审团裁定需支付2.62亿美元的赔偿金,原因是该公司侵犯了德国科学家Dieter Suess拥有的硬盘驱动器(HDD)记录技术专利。Suess是维也纳大学功能性材料物理学教授…

linux系统编程:进程(2)

1.在fork函数前打开函数和fork之后打开文件区别 1.fork之前open 子进程会继承父进程已打开的文件的相关信息所以,此时父子进程 会影响统一个offset值 2.fork之后open 父子进程各自有各自的打开文件的信息:相互之间不会有影响。 2.进程创建好之后: 1.任务--- …

Java流程控制01:用户交互Scanner

本节教学视频链接:https://www.bilibili.com/video/BV12J41137hu?p33&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p33&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 Scanner 类用于扫描输入文本从字符串中提…

具备长短距离注意力模块的Lite Transformer

Transformer在自然语言处理(例如,机器翻译、问答)中已经变得无处不在;然而,它需要大量的计算才能实现高性能,这使得它不适合受硬件资源和电池严格限制的移动应用程序。在本文中,提出了一个高效的移动NLP架构,Lite Tran…

jq8900-16p与stm32f103c8t6测试

jq8900-16p与stm32f103c8t6测试 引言 本文从购买器件, 到连线步骤, 再到驱动的模块原理讲解, 后面根据不同的语音, 进行文字转语音步骤,全在资料导航里面. 本模块后面着重讲解, jq8900快速移植 本文资料导航 模块购买步骤 跳转 连线步骤 跳转 https://blog.csdn.net/qq_57484…

Vue的事件处理、事件修饰符、键盘事件

目录 1. 事件处理基本使用2. 事件修饰符3. 键盘事件 1. 事件处理基本使用 使用v-on:xxx或xxx绑定事件&#xff0c;其中xxx是事件名&#xff0c;比如clickmethods中配置的函数&#xff0c;都是被Vue所管理的函数&#xff0c;this的指向是vm或组件实例对象 <!DOCTYPE html&g…

探秘未来驾驶,汽车智能座舱软件测试的艺术与科学

什么是智能座舱软件测试 智能座舱软件测试是一种专门针对现代汽车中集成的先进驾驶辅助系统(ADAS)、信息娱乐系统、人机交互界面(HMI)以及其他智能座舱组件的软件质量保证过程。随着汽车行业的数字化和智能化转型&#xff0c;无人驾驶的出现&#xff0c;智能座舱已成为汽车用户…

Keepalived+Haproxy实现高可用

keepalived利用 VRRP Script 技术&#xff0c;可以调用外部的辅助脚本进行资源监控&#xff0c;并根据监控的结果实现优先 动态调整&#xff0c;从而实现其它应用的高可用性功能。 一、VRRP Script 配置 1、定义脚本 vrrp_script&#xff1a;自定义资源监控脚本&#xff0c;…

【光流估计】【深度学习】Windows11下FastFlowNet代码Pytorch官方实现与源码讲解

【光流估计】【深度学习】Windows11下FastFlowNet代码Pytorch官方实现与源码讲解 提示:最近开始在【光流估计】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【光流估计】【深度学习】Windows11下FastFlowNet代码Pytorch官方实现与源码讲解前言…

VUE系列之极速入门与实践教程

系列博客专栏&#xff1a; JVM系列博客专栏SpringBoot系列博客 实验环境 npm v10.8.1 node v20.16.0 vue.js v3.4.37 VSCODE 1.88.1 什么是Vue.js Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。Vue.js 是一套构建用户界面的框架&…

聚合平台项目优化(门面模式,适配器模式,注册器模式)

前言&#xff1a; 这篇文章的思路就是抛出问题&#xff0c;再思考解决方案&#xff0c;最后利用设计模式解决问题 项目背景&#xff1a; 聚合搜索平台的主要功能就是一个有强大搜索能力的一个项目 用户输入一个词&#xff0c;同时可以搜索出用户&#xff0c;文章和图片这种…

【AI学习】具身智能的技术发展、商业路径等有趣观点

阅读了两篇有关具身智能的文章&#xff0c;有好多话语&#xff0c;挺有趣&#xff0c;做一些摘录。 一篇是&#xff1a;腾讯研究院的《具身智能的10个真问题&#xff5c;3万字圆桌实录》&#xff08;链接&#xff1a;https://mp.weixin.qq.com/s/peIi0YOJGKFV3fpLURDyyQ&#x…

一天搞定Vue3——包含Axios、ElementUI Plus、Vuex的使用!!!

前言,本篇文章是依据bilibili博主(波波酱老师)的学习笔记,波波酱老师讲的很好,很适合速成!!! 本篇文章会与vue2进行对比学习,并且也有很多的JavaScript知识点&#xff0c;要提前掌握他们才能学的效果更佳,见效更快。&#x1f973; 文章目录 Vue基础Vue的底层原理el挂载点data数…