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

原创
01/17 09:24
阅读数 22

file

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

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

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

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

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

核心流程

file

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

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

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

file

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

file

内部实现

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

$SNAPLET_SOURCE_DATABASE_URL='postgresql://postgres:postgres@localhost:5432/postgres' npx snaplet snapshot capture /tmp/snapshot_1

file

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

file

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

file file

总结

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

file

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


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

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部