数据库工具解析之 OceanBase 数据库导出工具

背景

大多数的数据库都配备了自己研发的导入导出工具,对于不同的使用者来说,这些工具能够发挥不一样的作用。例如:DBA可以使用导数工具进行逻辑备份恢复,开发者可以使用导数工具完成系统间的数据交换。这篇文章主要是为OceanBase的用户介绍一下OceanBase自研的数据库导出工具——obdumper。让大家了解导数工具的发展历程和现状。

官方文档说明过 obdumper 使用Java语言开发的,这里之所以选择Java语言,主要是为了解决跨平台的问题。毕竟平台适配相关的工作也是一件比较烦的事儿,事实上已经有用户咨询过 obdumper 是否可以直接运行在 x86, arm 等平台,似乎一切都在当初语言选择的预料之中。虽然 OceanBase 对于 MySQL/Oracle 的内核特性具备较高的兼容性,但是开源的 MySQL/Oracle 生态工具是不推荐使用的,因其没有更好地兼容 OceanBase 内核的行为。我们没有选择魔改开源工具,而是选择自研的目的就是为了让其变得更加贴身。除此以外,也希望能够随着 OceanBase 自身业务的发展而能做到任意扩展。下面我们会从不同的角度来介绍这款工具。

核心功能

简单说介绍几个功能的应用场景:
  • 导出过去某个时间点的历史快照数据,便于后期的系统降级回滚;
  • 导出一张表中满足指定条件的数据,定期导出数据进行业务分析;
  • 导出的表数据文件进行高压缩处理,降低长期备份归档存储成本;
  • 导出整库的数据定期进行备份归档,为了系统灾备或者合规审计;
  • 导出的数据进行加工处理,例如:转换、脱敏等。合规使用数据;

上述功能是不是经常用在日常的开发、测试、运维等工作中?既要满足业务,又要与时俱进。以文件压缩来讲,常见的数据导出工具是将数据导出成CSV文件,再进行后置压缩,压缩效果并不好。为了让开发环境能够使用与生产相近的数据,可以对导出的数据进行脱敏,再导入到开发库中。导数工具的目标就是让数据能够在企业内部高效地流动起来,充分发挥业务数据应有的价值。

架构原理

obdumper 内部基于业务schema的定义设计了一套非常丰富的表数据切分策略(或者叫分片策略),一个库或者一张表进行多任务并行化处理,大幅提升数据的导出性能。当然,影响性能的因素有很多,例如:表结构设计,数据传输网络,数据落盘的IO 等。整体的框架是面向格式和存储进行扩展,像CSV,SQL等面向行存储的格式便于小数据量业务直接使用,例如:Excel 直接打开文件进行查看、分析;像ORC, Parquet 等面向列存储的格式可以存放大规模的表数据。同时,我们也将会支持将数据导出到不同的存储介质,让数据与存储充分解耦,促进数据跨平台的流动性。大致的架构如下图所示:

1700644489

提醒:我们强烈建议用户设计表结构时,为表添加主键。表的数据量庞大时,还要对表进行分区化改造,并且保证每一个分区内的数据相对均衡。

性能测试

使用TPC-H 100GB测试库按照不同的文件格式进行导出,由于 ORC/Parquet 导出过程中默认开启压缩,所以数据导出性能比CSV/SQL格式略低一些。实际业务中牺牲一点性能换取更低的存储空间,大多数用户还是能接受的。导出测试性能图表如下:

1700645307

压缩测试

1700646210

整库100GB数据按照 ORC/Parquet 格式导出,默认采用zstd压缩大约是 4 : 1。如果对 CSV 文件中相同的数据采用后置压缩,压缩率远远达不到这么高。压缩率高低,不仅与压缩算法相关,也与数据的特征也有很大的关系。不同的业务数据采用相同的算法进行压缩后的效果差异也很明显,建议用户以实际的业务数据进行压缩为准。(压缩率的计算公式:Compression Ration ≈ Uncompressed Size/Compressed Size)

相关文档

官方文档: 导数工具

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

编曲知识20:人声和声处理 分轨导出 总线处理

和声处理 和声 声像注意不要和主旋律重叠 各个效果器的处理幅度可以更大 呼吸音可直接去掉 尽量不要和主旋律共用一个混响延迟轨 注意音量、注意主次 和声拓展-模拟合唱 录制两轨同八度的主旋律或低八度高八度的主旋律 声像左右分配 音量拉低 将各个合唱轨进行失真处理 …

【Pytorch】VSCode实用技巧 - 默认终端修改为conda activate pytorch

VScode修改配置使得启动终端为conda环境 VScode跑项目,在启动pytorch项目时往往会有千奇百怪的问题,最常见的就是显示“conda activate pytorch”后会要求“conda init”,但输入后实际上也不行,这是因为VSCode默认终端为 Powersh…

网站模板-慈善捐赠基金会网站模板 Bootstrap4 html

目录 一.前言 二.预览 三.下载链接 一.前言 这是一个慈善网站的页面。页面包含了导航栏、横幅部分、关于、使命、新闻、活动、捐赠和页脚等不同的部分。该网站还包含了一些CSS样式和JavaScript脚本来实现交互和样式效果。 这个网站的具体结构如下: 导航栏部分&a…

kafka---topic详解

一、分区与高可用 在Kafka中,事件(events 事件即消息)是以topic的形式进行组织的;同时topic是分区(partitioned)的,这意味着一个topic分布在Kafka broker上的多个“存储桶”(buckets)上。这种数据的分布式放置对于可伸缩性非常重要,因为它允许客户端应用程序同时从多个…

第十三章 使用深度和法线纹理

获取深度和法线纹理 背后的原理 深度纹理是一张渲染纹理,它里面存储的像素值不是颜色,而是一个高精度的深度值。深度值范围是[0, 1],非线性分布的。这些深度值来自于顶点变换后得到的归一化的设备坐标(NDC)。一个模型想要被绘制在屏幕上,需要把它的顶点从模型空间变换到齐…

OpenCV从入门到精通实战(三)——全景图像拼接

全景图像拼接实现 定义 Stitcher 的类,用于实现两张图片的拼接。使用的技术是基于 SIFT 特征点检测与匹配,以及利用视角变换矩阵来对齐和拼接图像。 import numpy as np import cv2class Stitcher:#拼接函数def stitch(self, images, ratio0.75, repro…

云手机助力舆情监测,智慧引领信息时代

随着信息时代的到来,舆情监测已成为政府、企业、高校、金融机构等各行业的必备利器。在这个信息爆炸的时代,如何及时准确地感知民意、把握市场动态,已成为各界迫切需要解决的问题。而云手机作为信息时代的新生力量,在舆情监测方面…

C++ UML 类图介绍与设计

1 类图概述 UML(Unified Modeling Language),即统一建模语言,是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。UML从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图…

PostgreSQL的学习心得和知识总结(一百三十八)|深入理解PostgreSQL数据库之Protocol message构造和解析逻辑

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

牛客 NC205 跳跃游戏(三)【中等 贪心 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/14abdfaf0ec4419cbc722decc709938b 思路 参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** …

带缓存的输入输出流(I/O)

文章目录 前言一、带缓冲的输入输出流是什么?二、使用方法 1.BufferedInputStream与BufferedOutputStream类2.BufferedReader与BufferedWriter类总结 前言 输入输出流可以视为,从A点把货物搬运至B点。那么带缓冲的意思可以视为用货车把A点的货物搬运至B点…

代码随想录算法训练营DAY28(记录)|C++回溯算法Part.5|491.递增子序列、46.全排列、47.全排列II

文章目录 491.递增子序列思路伪代码CPP代码优化代码 46.全排列思路伪代码CPP代码 47.全排列IICPP代码 491.递增子序列 力扣题目链接 文章链接:491.递增子序列 视频连接:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列…

安装GPT 学术优化 (GPT Academic)@FreeBSD

GPT 学术优化 (GPT Academic)是一个非常棒的项目 可以帮助我们完成中科院的一些日常工作。 官网:GitHub - binary-husky/gpt_academic: 为GPT/GLM等LLM大语言模型提供实用化交互接口,特别优化论文阅读/润色/写作体验,模块化设计,…

win2022服务器apache配置https(ssl)真实环境实验(避坑之作)不依赖宝塔小皮等集成环境

本次实验背景: 完全参考官方 https://cloud.tencent.com/document/product/400/4143 文档流程,没有搞定,于是写下避坑之作。 服务器:腾讯云轻量应用服务器 操作系统: Windows Server 2022 DataCenter 64bit CN apache…

51-41 Stable Video Diffusion,高质量视频生成新时代

23年11月,Stability AI公司公开了稳定视频扩散模型Stable Video Diffusion(SVD)的代码和权重,视频生成迎来了新时代。SVD是一种潜在扩散模型,支持文本生成视频、图像生成视频以及物体多视角3D合成。从工程角度来看,本文主要提出了…

C++如何使用string类

文章目录 为什么要学习string?库中的string关于编码ASCII编码Unicode编码 迭代器Iteratorsstring常用构造接口接口声明与功能说明接口演示 string类对象的容量操作接口声明与功能说明接口演示reverse与resize在不同平台下的扩容与缩容机制 string类对象的访问及遍历操作接口声…

Java项目实现图形验证码(Hutool)

项目架构: 使用SpringCloudmysqlmybatis-plus需要将数据库中的数据导出到Excel文件中 前端为Vue2 业务场景: 登录时使用验证码登录 1.1 打开hutool, 搜索 图片验证码 1.2后端编写生产验证码方法 1.3前端 1.3.1展示验证码 1.3.2 前端方法 1.3.2.1UU…

Django中的数据库优化与ORM性能调优【第169篇—ORM性能调优】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Django中的数据库优化与ORM性能调优 在开发基于Django的Web应用程序时,数据库是…

ubuntu 查询mysql的用户名和密码 ubuntu查看username

ubuntu 查询mysql的用户名和密码 ubuntu查看username 文章标签mysqlUbuntu用户名文章分类MySQL数据库 一.基本命令 1.查看Ubuntu版本 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.5 LTS Release: 16.04 Coden…

leetcode-分割链表

题目 面试题 02.04. 分割链表 提示 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 示例 1: 输入&#xff…