历史库,成本与性能如何兼得?| OceanBase应用实践

news2024/11/15 7:02:51

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

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

相关文章

简单的docker学习 第13章 CI/CD与Jenkins(下)

第13章 CI/CD 与 Jenkins 13.13 自由风格的 CI 操作(最终架构) 前面的架构存在的问题是,若有多个目标服务器都需要使用该镜像,那么每个目标服务器都需要在本地构建镜像,形成系统资源浪费。若能够在 Jenkins 中将镜像相撞构建好并推送到 Har…

Java属性重写问题

目录 属性重写 案例演示 多态练习 练习1 练习2 属性重写 ​​​​​​​ 属性没有重写之说,属性的值看编译类型。 instanceOf 比较操作符,用于判断对象的运行类型是否为某类型或者某类型的子类。 案例演示 父类base,有一个count属…

Collection和List集合

1.Collection集合 1.1数组和集合的区别【理解】 相同点 都是容器,可以存储多个数据 不同点 数组的长度是不可变的,集合的长度是可变的 数组可以存基本数据类型和引用数据类型 集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类 1.2集合类体系结构【理解】 …

旧手机拍摄的视频模糊可以修复清晰吗?

你是否时常“考古”一些老电影、老动漫来回忆旧日时光?你是否也有一些珍贵的录像,带你重温过去的美好?然而,我们已经习惯了高清体验,回头再看曾经的旧影像,画质或许“渣”的让人不忍直视。 旧手机像素不好&…

【论文笔记】Dual-Balancing for Multi-Task Learning

Abstract 多任务学习(Multi-task learning, MTL)中,任务平衡问题仍然是重要的挑战,损失、梯度尺度的不同,会导致性能的折中。 本文提出Dual-Balancing for Multi-Task Learning (DB-MTL),从损失和梯度两个角度缓解任务均衡问题。…

成功解决:IDEA导入java项目 或 建包的时候com.不分开 【详细原理解释说明】

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 🎓擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号:热爱技术的小郑。回复 Java全套视频教程 或 前端全套视频…

子串 前缀和 | Java | (hot100) 力扣560. 和为K的子数组

560. 和为K的子数组 暴力法&#xff08;连暴力法都没想出来……&#xff09; class Solution {public int subarraySum(int[] nums, int k) {int count0;int len nums.length;for(int i0; i<len; i) {int sum0;for(int ji; j<len; j) {sumnums[j];if(sum k) {count;}…

C/C++复习 day2(模板,继承,多态)

C/C复习 day2 文章目录 C/C复习 day2前言一、模板1.模板的原理2.非类型模板参数3.模板的特化a. 函数模板的特化b. 类模板的特化1.全特化2.偏特化 4.模板的分离编译 二、继承1.继承的概念2.继承与派生类对象赋值转化3.隐藏1.成员变量的隐藏2. 成员函数的隐藏 4.继承中的友元5.继…

数据结构:栈(含源码)

目录 一、栈的概念和结构 二、栈的实现 2.1 头文件 2.2 各个功能的实现 初始化栈 入栈 出栈 获取栈顶元素和栈中有效个数 判断栈是否为空 栈的销毁 2.3 测试 完整源码 一、栈的概念和结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和…

[C++][opencv]基于opencv实现photoshop算法图像剪切

【测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 //图像剪切 //参数&#xff1a;src为源图像&#xff0c; dst为结果图像, rect为剪切区域 //返回值&#xff1a;返回0表示成功&#xff0c;否则返回错误代码 int imageCrop(InputArray src, OutputArray dst,…

遥感影像-语义分割数据集:sar水体数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;该数据集由WHU-OPT-SAR数据集整理而来&#xff0c;覆盖面积51448.56公里&#xff0c;分辨率为5米。据我们所知&#xff0c;WHU-OPT-SAR是第一个也是最大的土地利用分类数据集&#xff0c;它融合了高分辨率光学和SAR图像&#xff0c;并进行了充…

Chromium编译指南2024 -Android篇:安装其他常用软件(三)

1.引言 在前面的章节中&#xff0c;我们详细讲解了编译 Chromium for Android 所需的系统和硬件要求&#xff0c;并介绍了如何配置开发环境&#xff0c;包括更改软件源和安装基本依赖。在完成这些基础配置之后&#xff0c;为了进一步提升开发和编译效率&#xff0c;您可能还需…

【Hot100】LeetCode—438. 找到字符串中所有字母异位词

目录 1- 思路哈希表 滑动窗口 2- 实现⭐438. 找到字符串中所有字母异位词——题解思路 3- ACM 实现 原题链接&#xff1a;438. 找到字符串中所有字母异位词 1- 思路 哈希表 滑动窗口 思路 哈希表&#xff1a;通过数组维护一个哈希表滑动窗口&#xff1a;通过控制数组的下标…

为何说本届巴黎奥运会中国金牌榜应排列第一?

为何说本届巴黎奥运会中国金牌榜应排列第一&#xff1f; 在奥运会上&#xff0c;金牌榜的排名一直是各国关注的焦点。然而&#xff0c;在历届奥运会中&#xff0c;关于金牌榜的统计方法和排名标准却存在一定的争议。尤其在中美两国之间&#xff0c;金牌榜的排名往往成为双方媒体…

制作好的excel报表设置打开密码或忘记密码怎么办?

excel工作表经常用来做数据统计、工资、报表等的文件格式&#xff0c;这些类型的文件都是很重要的数据资料&#xff0c;为此做这些数据的朋友们都会给他设置一个打开密码&#xff0c;不让其他人随便打开。但随着时间的流逝&#xff0c;我们做的数据报表越来越多了&#xff0c;做…

transformer(李宏毅老师系列)

自学参考&#xff1a; Transformer:Attention Is All You Need Transformer论文逐段精读 视频课 课件资料 笔记 一、引入 seq2seq&#xff1a;输入一个序列的向量作为input&#xff0c;output的长度由机器自己决定seq2seq model应用: 语音辨识 输入是声音讯号的一串vector 输出…

提高清晰度的全彩LED显示屏的关键要素

全彩LED显示屏作为现代广告宣传和信息传播的主要媒介&#xff0c;其清晰度在很大程度上决定了观众的视觉体验和信息传达的效果。随着人们对高清显示需求的不断提升&#xff0c;全彩LED显示屏也在向更高清、更细腻的显示效果迈进。那么&#xff0c;如何进一步提升全彩LED显示屏的…

6数字基石:掌握计算机语言、多媒体与系统工程

计算机语言 计算机语言是指用于人与计算机之间交流的一种语言&#xff0c;是人与计算机之间传递信息的媒介。计算机语言主要由一套指令组成&#xff0c;而这一种指令一般包括表达式、流程控制和集合三大部分内容。 表达式又包含变量、常量、字面量和运算符。 流程控制有分支…

善用 AI ,优化项目,保姆级简历写作指南第七弹

大家好&#xff0c;我是程序员鱼皮。做知识分享这些年来&#xff0c;我看过太多简历、也帮忙修改过很多的简历&#xff0c;发现很多同学是完全不会写简历的、会犯很多常见的问题&#xff0c;不能把自己的优势充分展示出来&#xff0c;导致错失了很多面试机会&#xff0c;实在是…

如何将TRIZ的“最终理想解”应用到机器人电机控制设计中?

TRIZ理论&#xff0c;作为一套系统的创新方法论&#xff0c;旨在帮助设计师和工程师突破思维惯性&#xff0c;解决复杂的技术难题。其核心思想之一便是“最终理想解”&#xff0c;它如同一盏明灯&#xff0c;指引着我们在技术创新的道路上不断前行。最终理想解追求的是产品或技…