使用 JuiceFS 快照功能实现数据库发布与端到端测试
今天的博客来自 JuiceFS 云服务用户 Jerry,他们通过使用 JuiceFS snapshot 功能,创新性地实现了数据的版本控制。Jerry,是一家位于北美的科技公司,利用人工智能和机器学习技术,简化用户购买汽车和家庭保险的比较及购买流程。
在软件开发领域,严格的测试和受控发布已经成为几十年来的标准做法。但如果我们能将这些原则应用到数据库和数据仓库中会怎样?想象一下,能够为数据基础设施定义一套带有测试用例的标准,自动应用于每个新的"发布",以确保客户始终看到准确和一致的数据。这将会极大改善数据质量。
01 挑战:为什么端到端测试在数据管理中并不常见
这个想法看似直观,但端到端测试在数据管理中并不常见,因为它需要数据库或数据仓库具备克隆或快照的功能,而大多数数据系统都不提供这一功能。
现代数据仓库本质上是随时间变化的有组织的可变存储,我们通过数据管道对其进行操作。数据通常在生成后立即对最终客户可见,没有"发布"的概念。当没有这个发布概念,对数据仓库进行端到端测试就没有多大意义。因为无法确保测试所看到的内容就是客户将看到的内容,这些数据在不断因为数据管线的修改而变化。

所以问题的核心,就是要在实现一种数据发布的机制,这种机制能够把某一个时刻数据仓库的状态提取成一个“快照“,并且控制这个”快照“对最终用户的可见性。这样,这个快照就成为一个”发布工件“,我们控制它什么条件、什么时间最终可以让用户看见。
02 现有方法及其局限性
一些团队在数据仓库之上开发了版本控制系统。他们不直接修改最终用户查询的表,而是为变更创建新版本的表,并使用原子交换操作来"发布"表。虽然这种方法在某种程度上有效,但它带来了重大挑战:
- 高效实施"创建和交换"模式并不容易;
- 确保涉及多个表的一致性(例如,验证订单表中的每一行在价格表中都有对应行)需要将多个表的变更"打包"成一个"事务",这也具有挑战性,不仅仅实现这种模式是困难的,这种模式也要求数据管线被相对严格的编排。

03 解决方案:由 JuiceFS 支持的 ClickHouse 数据库克隆
我们开发了一个系统,利用 JuiceFS snapshot 功能将 ClickHouse 数据库"克隆"为副本。这种方法在我们早前的文章 "低成本读写分离:Jerry构建主从ClickHouse架构" 中有详细介绍。
它的工作原理如下:
- 我们在 JuiceFS 上运行 ClickHouse 数据库,JuiceFS 是一个由对象存储服务(OSS)支持的 POSIX 兼容共享文件系统。
- JuiceFS 提供了一个实现 git 分支语义的"快照"功能。
- 使用简单的命令如
juicefs snapshot src_dir des_dir,我们可以创建 src_dir 在那一刻的克隆。
这种方法使我们能够轻松地从运行中的实例复制/克隆 ClickHouse 实例,创建一个可以被视为"发布工件"的冻结快照。
04 使用数据库克隆实施端到端测试
有了这种机制,我们可以对 ClickHouse 副本运行端到端测试,并根据测试结果控制其可见性。
现在可以使用常见的单元测试框架(我们使用 pytest )开发、组织和迭代数据端到端测试。这种方法使我们能够将数据可用性和可靠性的基础设施和业务标准编码成数据测试。
一个典型的测试是表大小测试,它有助于防止由意外或临时表损坏导致的数据问题。还可以定义业务标准,以保护数据报告和分析免受数据管道中可能导致数据错误的意外更改的影响。例如,用户可以在一列或一组列上强制唯一性以避免重复——这在计算营销成本时是一个关键因素。

在 Jerry,这种架构在近几个季度中发挥了至关重要的作用,有效防止了几乎所有可能暴露给最终客户的 P0 级数据问题。
这种方法不仅限于 ClickHouse。如果在 JuiceFS 之上运行任何类型的数据湖或湖仓,采纳本文描述的发布机制可能会更容易。
05 结论
通过将现代软件开发实践引入数据管理世界,我们可以显著提高数据质量、可靠性和一致性。数据库克隆和端到端测试的结合为确保客户始终看到正确的数据提供了强大的工具集,就像他们期望在经过充分测试的软件发布中看到正确的功能一样。
下图展示了我们的数据库发布和端到端测试过程的工作流程。

这个架构的诞生标志着我们在缩小软件开发与数据管理之间的差距方面迈出了重要一步,为数据领域的创新和质量保障开辟了全新的可能性。
希望这篇内容能够对你有一些帮助,如果有其他疑问欢迎加入 JuiceFS 社区与大家共同交流。
使用 JuiceFS 快照功能实现数据库发布与端到端测试的更多相关文章
- sql数据库发布、订阅同步方式操作
Sql数据库发布订阅分为两个步骤:1.发布.2.订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅. 一.发布. 发布需要用实际的服务器名称,不能使用 ...
- maven2-snapshot快照库和release发布库的应用
在项目中应用snapshot和release库,应用snapshot和release库达到不同环境下发布不同的版本的目的,首先看一个pom文件的定义: <project> <mode ...
- maven配置之:<distributionManagement>snapshot快照库和release发布库
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...
- pom配置之:<distributionManagement>snapshot快照库和release发布库
本文转载自: 铁木箱子的mzone的博客: http://www.mzone.cc/article/277.html http://www.mzone.cc/article/279.html 在使用 ...
- maven2中snapshot快照库和release发布库的应用
在之前的文章中介绍了maven2中snapshot快照库和release发布库的区别和作用,我今天这里要介绍的是如何在项目中应用snapshot和release库,应用snapshot和release ...
- Trove系列(四)—Trove的快照功能介绍
Trove 快照用于支持DbaaS 备份,复制等功能.在Trove API (guest_agent)上将支持本功能.本功能将能够支持快照,从而用来进行副本设置,主数据库克隆和备份,以及数据恢复.目前 ...
- pom配置之:snapshot快照库和release发布库
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...
- Sql Server 2008R2 数据库发布与订阅
背景描述: 发布服务器A: (远程端) , 数据库服务名: GUANWANG1 订阅服务器B: (本机) , 数据库服务名: PC-LLRDBA 需要从服务器A中数据库发布,然后在B中订阅A发布 ...
- [转]maven2中snapshot快照库和release发布库的应用
[转载声明] 转载时必须标注:本文来源于铁木箱子的博客http://www.mzone.cc [原文地址] 原文永久地址是:http://www.mzone.cc/article/279.html 在 ...
- 超详细!! sql server 同步数据库 发布 订阅 跨网段 无公网ip 常见问题
问题描述 主机1:发布端 阿里云服务器--有公网ip 主机2:订阅端 笔记本--无公网ip 数据量很小,主要是熟悉发布订阅的操作流程. 主机2仅仅作为主机1的本地备份,要求修改云服务器上数据后,能通过 ...
随机推荐
- MYSQL——帆软连接报错
2024/07/11 1.报错 2.报错原因 3.解决办法 4.参考 1.报错 错误代码:11300001 数据集配置错误<br>Query:<br>Unknown initi ...
- Ynoi2016镜中的昆虫
[Ynoi 2016] 镜中的昆虫 简化题意 给定长为 \(n\) 序列 \(a\) , 两种操作 \(m\) 次: 1 l r x : 将 \([l , r]\) 修改为 \(x\) 2 l r : ...
- Unix、Linux、GNU 关系梳理
之前写了一篇 MSYS2.MinGW 和 Cygwin 关系梳理的博客,但是要讲清它们几个的关系最好还是先了解一下操作系统的发展历程.遂补充了这篇博客. UNIX:现代操作系统的始祖 Operatin ...
- SpringMVC:SpringMVC处理Ajax请求
目录 @RequestBody @RequestBody获取json格式的请求参数 @ResponseBody @ResponseBody响应浏览器json数据 @RestController注解 @ ...
- 《花100块做个摸鱼小网站! 》第五篇—通过xxl-job定时获取热搜数据
️基础链接导航️ 服务器 → ️ 阿里云活动地址 看样例 → 摸鱼小网站地址 学代码 → 源码库地址 一.前言 我们已经成功实现了一个完整的热搜组件,从后端到前端,构建了这个小网站的核心功能.接下来, ...
- 国内加速拉取docker镜像的几种方法
参考首页 快捷命令,使用本站代理拉取镜像,并修改回原始镜像名,在删除代理镜像名. 参考以下 docker cli 和 docker-compose.yml 修改镜像名后,继续一直使用本站代理服务未启动 ...
- 击败全球上千参赛队伍,合合信息获ICDAR“文本篡改检测”赛道冠军
AI技术的快速发展激发了人们对于美好未来的畅享,也带来了潜在的危机,数据泄露.电信诈骗等系列风险与隐患开始浮出水面.利用科技手段构建可信的技术发展环境,保护使用者的信息及财产安全,正在成为行业共识. ...
- SpringMVC——SSM整合——表现层数据封装
表现层数据封装 设置统一数据返回结果类 注意:Result类中的字段并不是固定的,可以根据需要自行增减提供若干个构造方法,方便操作 返回结果类 package com.cqupt.controller ...
- Axios——异步框架
Axios--异步框架(简化AJAX代码书写) Axios 请求方式别名
- Filter——过滤器
Filter Filter 快速入门 Filter 执行流程 1.放行前,对 request 数据进行处理 2.放行后,对 response 数据进行处理 ...