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

随着数据量的迅猛增长,企业和组织在数据库管理方面遭遇的挑战愈发凸显。数据库性能逐渐下滑、存储成本节节攀升,以及数据运维复杂性的增加,这些挑战使得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.rhkb.cn/news/399623.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

奇异值分解(SVD)

1 奇异值分解(SVD)简介 Beltrami 和 Jordan 被认为是奇异值分解(Singular Value Decomposition,SVD)的共同开创者,二人于19世纪70年代相继提出了相关理论。奇异值分解主要解决的问题是数据降维。在高维度的数据中,数据…

Tied and Anchored Stereo Attention Network for Cloud Removal in Optical

论文名称 基于固定锚定立体注意力网络的光学遥感图像去云方法代码运行 论文代码 https://github.com/ningjin00/TASANet?tabreadme-ov-file 论文地址 1环境创建 模型环境给了这几个包,如果你自带环境 那就运行代码 提示缺哪个装哪个 python 3.12rasterio 1.3.10…

【AI人工智能】文心智能体 - 你的专属车牌设计师

引言 自AI盛行以来,不断有各种各样的人工智能产品崭露头角。我们逐步跟着不断产生的人工智能来使自己的工作和生活变得更加智能化!那么我们是否能够创造一款专属于自己的人工智能产品呢? 文心智能体平台就给我们提供了这样的机会&#xff0c…

数值微分求梯度、计算图求梯度,实现单层线性回归 模型速度差异及损失率比对

文章目录 简述测试结果完整代码 简述 先将前面两篇文章的代码重构一下,抽离共同函数到utils.py。 重构后结构: ComputationGraphLinearNet.py: 使用计算图(forward、backward)求梯度构建的线性模型,代码…

分库分表的使用场景和中间件

文章目录 一、为什么要分库分表?分库分表的使用场景?二、分库分表常用中间件1、Cobar2、TDDL3、Atlas4、Sharding-jdbc5、Mycat6、总结 一、为什么要分库分表?分库分表的使用场景? 场景1:注册用户就 20 万&#xff0c…

<数据集>集装箱缺陷识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:3793张 标注数量(xml文件个数):3793 标注数量(txt文件个数):3793 标注类别数:4 标注类别名称:[DAMAGE - DEFRAME, DENT, DAMAGE - RUST, DAMAGE - HOLE] 序号类别名…

飞睿智能8km无人机WiFi图传模块,高清、稳定、超远距!实时传输新高度

在数字化飞速发展的今天,无人机已经从一个遥不可及的科幻概念,变成了我们日常生活中的得力助手。无论是航拍美景、农业植保,还是紧急救援、物流配送,无人机都展现出了其独特的优势。而在这背后,一个至关重要的技术支撑…

ThinkPHP教程

thinkPHP笔记 01. phpEnv配置安装 主讲老师 - 李炎恢 1. 学习基础 ThinkPHP8.x: 前端基础:HTML5/CSS(必须)、JavaScript(可选、但推荐有);后端基础:PHP基础,版本不限,但不能太老,至少PHP5.4以上语法,TP8是兼容PHP8.x的;数据库基础:MySQL数据库,掌握了常规的SQL…

再谈表的约束

文章目录 自增长唯一键外键 自增长 auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。 自增长的…

面向服务架构(SOA)介绍

在汽车电子电气架构还处于分布式时代时,汽车软件的开发方式主要是采用嵌入式软件进行开发,而随着汽车智能化程度的加深,更加复杂且多样的功能需求让汽车软件在复杂度上再上一层。在整车的自动驾驶方面,由于未来高阶自动驾驶能力的…

《Unity3D网络游戏实战》正确收发数据流

TCP数据流 系统缓冲区 当收到对端数据时,操作系统会将数据存入到Socket的接收缓冲区中 操作系统层面上的缓冲区完全由操作系统操作,程序并不能直接操作它们,只能通过socket.Receive、socket.Send等方法来间接操作。当系统的接收缓冲区为空&…

RCE绕过技巧

目录 EVAL长度限制突破技巧 1.使用反引号 2.file_put_contents写入文件 3.php5.6变长参数usort回调后门 命令长度限制突破技巧 1.拼接文件名 无字母数字的webshell命令执行 1.取反码 2.上传临时文件 EVAL长度限制突破技巧 分析代码:首先传递一个param参数&…

OceanBase V4.3 列存引擎之场景问题汇总

在OceanBase 4.3版本发布后(OceanBase社区版 V4.3 免费下载),其新增的列存引擎,及行列混存一体化的能力,可以支持秒级实时分析,引发了用户、开发者及业界人士的广泛讨论。本文选取了这些讨论中较为典型的一…

企业应该如何准备 EcoVadis 审核?

企业准备 EcoVadis 审核可以参考以下步骤: 注册:在网上注册并提供公司的相关信息,包括法律实体名称、国家和地区、企业规模和行业等。如果是受客户邀请参加评估,需按照邀请邮件中的链接进行注册,并确保客户能随时获知评…

安卓默认混淆规则文件的区别

在 Android 项目中,ProGuard 是一个优化和混淆代码的工具。proguard-android-optimize.txt 和 proguard-android.txt 是两个用于配置 ProGuard 的默认规则文件,如图下 它们有以下区别: proguard-android-optimize.txt: 优化:这个配…

Django中事务的基本使用

1. Django事务处理 事务(Transaction): 是一种将多个数据库操作组合成一个单一工作单元的机制. 如果事务中的所有操作都成功完成, 则这些更改将永久保存到数据库中. 如果事务中的某个操作失败, 则整个事务将回滚到事务开始前的状态, 所有的更改都不会被保存到数据库中. 这对于…

系统编程 day10 进程2

进程创建之后: 1.任务-----子进程与父进程干的活差不多 2.父进程创建出子进程之后,子进程做的与父进程完全不同 shell程序-----bash----- 以上为进程运行的过程中,典型的两种应用场景 能够改变子进程的执行效果的函数是exec函数族 l和v&a…

【网盘系统3.0版本】百度云盘手动cookie获取,添加到扫码系统管理平台。

一.获取cookie步骤 1.谷歌浏览器选择开发者模式。 2.选择网路,过滤接口main 3.选择request head,cookie列表里面可查看二.添加到管理平台。 1.登录管理平台,输入账户和密码 2.选择账户设置,添加cookie。 4.复制卡密链接&#xf…

LVS实验的三模式总结

文章目录 LVS的概念叙述NAT工作模式实战案例**思想:**NAT工作模式的优点NAT工作模式的缺点 NAT工作模式的应用场景大致配置 route:打开路由内核功能 部署DR模式集群案例工作思想:大致工作图如下思路模型 具体配置与事实步骤补充 防火墙标签解…

c++编程(20)——类与对象(6)继承

欢迎来到博主的专栏——c编程 博主ID:代码小豪 文章目录 继承继承与权限访问 基类和派生类基类和派生类的赋值兼容转换基类与派生类的类作用域派生类与基类的构造函数基类与派生类拷贝构造函数 继承与静态成员final关键字 面向对象编程的核心思想是封装、继承和多态…