告别手搓!Postgres 一站式测试数据生成方案

Snaplet 是一个一站式开发者工具,用来生成还原真实生产环境的数据。

在开发过程中,为了提高研发效率,开发者自然希望可以使用和生产环境类似的数据进行测试。这其中就面临不少的挑战:

  1. 数据隐私问题。
  2. 如何从生产数据中进行取样。因为数据是关联的,所以还要获取关联的数据。

保证数据的保鲜度。因为生产环境的数据一直在变化,一周前从生产环境拉的数据可能就已经过时了。

解决这些挑战需要设计灵活合理的工作流,并且因为是针对开发阶段的,所以开发者体验就显得很重要。Snaplet 就是针对这些目标进行设计的一款解决方案。

核心流程

Snaplet 核心交互是 CLI,使用前端技术栈实现。Snaplet 同时配有 Cloud,用于托管处理过的数据库快照。大致的流程分为三步:

  • 从生产环境的数据库生产快照。
  • 对快照进行处理,处理有三个子步骤:
    1. Select。只选取需要的数据库/表,比如 log 表这种就可以一开始剔除。
    2. Transform。把生产的数据内容进行变换,比如对字段进行脱敏。
    3. Subset。过滤掉不需要的数据,比如只采样 1%。
  • 通过 CLI 把处理后数据库快照恢复到测试数据库。

因为如何变换生产数据库数据是五花八门的,所以 Snaplet 是通过让用户写 JS/TS 代码的方式来完成的。

Snaplet 同时提供了生成 seed 数据的功能。Snaplet 会根据用户的数据库 schema,自动生成操作数据变换的客户端。然后让用户写 JS/TS 来指定需要生成这样的 seed 数据。

内部实现

执行命令行看一下 Snaplet 生成的快照:

bash 复制代码
$SNAPLET_SOURCE_DATABASE_URL='postgresql://postgres:postgres@localhost:5432/postgres' npx snaplet snapshot capture /tmp/snapshot_1

从生成的结构看,有 structure.json / summary.json 这样的 manifest 文件。schema 保存在 schemas.sql。而每个表的数据则以单独的 CSV 文件格式保存。

看一下 Snaplet 的依赖,不出所料,用的是 Faker,就是去年一气之下被作者删库的主角。

总结

Snaplet 的亮点在于集成。一方面是和基于 Git 的研发流程集成 (GitOps),可以和分支,PR, CI/CD 这些集成。另一方面是和各种云服务的集成,比如 AWS S3,GitHub Action,Neon,Prisma,Supabase 这些。Snaplet 体现了典型硅谷开发者工具公司的风格,专注于一个细分领域。目前社区期待 Snaplet 可以尽快支持 MySQL,当然如果已经是 Postgres 党,那就可以立马上车,品味公司之选。

Snaplet 极大提高了在功能开发阶段中,数据库开发的效率。而当开发阶段完成,需要审核上线数据库的变更时,就是 Bytebase 出场的时候了。


💡 更多资讯,请关注 Bytebase 公号:Bytebase

相关推荐
穿过锁扣的风14 分钟前
一文搞懂 SQL 五大分类:DQL/DML/DDL/DCL/TCL
数据库·microsoft·oracle
l1t15 分钟前
DeepSeek总结的SNKV — 无查询处理器的 SQLite 键值存储
数据库·sqlite·kvstore
洛豳枭薰17 分钟前
MySQL 梳理
数据库·mysql
九.九36 分钟前
CANN 算子生态的底层安全与驱动依赖:固件校验与算子安全边界的强化
大数据·数据库·安全
蓝帆傲亦40 分钟前
代码革命!我用Claude Code 3个月完成1年工作量,这些实战经验全给你
jvm·数据库·oracle
亓才孓43 分钟前
[JDBC]事务
java·开发语言·数据库
PD我是你的真爱粉1 小时前
FastAPI使用tortoiseORM
数据库·fastapi
剩下了什么8 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥9 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉9 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann