查看原文
其他

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

天舟 Bytebase 2024-02-05


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

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

  1. 数据隐私问题。

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

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


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

核心流程

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

  1. 从生产环境的数据库生产快照。

  2. 对快照进行处理,处理有三个子步骤:

    1. Select。只选取需要的数据库/表,比如 log 表这种就可以一开始剔除。

    2. Transform。把生产的数据内容进行变换,比如对字段进行脱敏。

    3. Subset。过滤掉不需要的数据,比如只采样 1%。

  3. 通过 CLI 把处理后数据库快照恢复到测试数据库。

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

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

内部实现

执行命令行看一下 Snaplet 生成的快照: $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
火烧眉毛,我是如何在周六删了公司的数据库
虽迟但到!MySQL 可以用 JavaScript 写存储过程了!

继续滑动看下一个

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

天舟 Bytebase
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存