告别手搓!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

相关推荐
RestCloud2 分钟前
在制造业数字化转型浪潮中,数据已成为核心生产要素。然而,系统割裂、数据滞后、开发运维成本高等问题,却像顽固的 “数据枷锁”,阻碍着企业发展。ETLCloud与
数据库·postgresql
!chen13 分钟前
【Spring Boot】自定义starter
java·数据库·spring boot
十碗饭吃不饱1 小时前
sql报错:java.sql.SQLSyntaxErrorException: Unknown column ‘as0‘ in ‘where clause‘
java·数据库·sql
我是Superman丶1 小时前
【优化】Mysql指定索引查询或忽略某个索引
数据库·mysql
程序定小飞1 小时前
基于springboot的在线商城系统设计与开发
java·数据库·vue.js·spring boot·后端
呆呆小金人1 小时前
SQL入门: HAVING用法全解析
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
LL_break2 小时前
Mysql数据库
java·数据库·mysql
野犬寒鸦2 小时前
从零起步学习Redis || 第十一章:主从切换时的哨兵机制如何实现及项目实战
java·服务器·数据库·redis·后端·缓存
倔强的石头_2 小时前
面向大数据架构的演进:为何 Apache IoTDB 是与生态无缝融合的理想之选?
数据库
Elastic 中国社区官方博客3 小时前
如何减少 Elasticsearch 集群中的分片数量
大数据·数据库·elasticsearch·搜索引擎·全文检索