连续肝了好几周, tauri 开发的轻量级数据库管理软件 DataZen v0.2.0 版本终于发布了

9 月 14 日
 flyxl

前言

之前在 V2EX 上发了两篇关于 DataZen 的帖子,尤其是上一篇发完之后有很多朋友到 github 上给了 star ,特别感谢大家的支持,同时也有很多朋友提出了宝贵的意见,让我意识到这个赛道的竞争到底有多激烈。重量级传统选手有 Navicat/DataGrip/DBeaver/TablePlus 等等,最近的 DBX 也很火功能也很强大。既然这个赛道竞争这么激烈,我为啥还要继续做 v0.2.0 版本呢,实事求是的说,一个是 vibe coding 极大的降低了开发成本,另一个也是寻求一个技术人的最后尊严吧:还想在这个代码急剧贬值的时代证明自己的价值,我可以不写代码了,但是我依然可以做出一个架构良好的软件,我做的软件依然比绝大部分零编程基础的人用 vibe coding 出来的软件要好。接下来就给大家简单介绍一下 DataZen 的大体架构。

DataZen 的大体架构

总体上来说,DataZen 采用的是 Host + 插件的架构。插件又包括运行时插件、编译期插件以及外观主题插件、Workspace App 。

一、编译期插件(驱动插件)

编译期主要是用来支持不同的数据库 driver ,这个方案的灵感来自 Caddy 的 xcaddy 方案:在编译前选择我需要使用到的功能模块,通过编译脚本将所需模块写入 main.go 中的 import 部分,编译后就自然带上了选择好的功能模块。那为啥用这个方案呢?主要是 rust 的 ABI 兼容做得不咋地,如果做成 DDL 会存在不可控的二进制兼容性问题。当然也可以考虑将驱动做成独立的进程,host 和驱动插件之间通过进程间通信来控制数据库操作,但这个方案相对比较复杂,暂时不考虑。

Driver 插件有几个要考虑的点:

二、运行时插件

这部分主要是为了解决 UI 增强问题,实现时参考了 VSCode 中 Extension Point 的做法:在 host 中定义好可以通过 extension 来进行扩展的扩展点,由 extension 覆盖注册扩展点挂载函数,运行时 host 会调用 extension 的挂载函数,然后由 extension 接管相关功能。这部分是在 v0.2.0 版本中引入的,主要是做了 SQLEditor 的编辑体验增强。

三、主题插件

这个就比较简单,主要是通过定义 css 变量等方式对主题进行覆盖

四、Workspace App

从产品形态上来看,Workspace app 更像是 chrome 的 extension:允许插件编写完整的 html 页面,可在页面内执行内嵌/本地 JS ,通过 postMessage 和 host 进行通信。host 也会暴露自身的一些能力给 workspace app ,比如查询连接列表、执行 SQL 等。

1. Workspace App 能干什么?

举个例子:我有个应用,应用内配置保存在数据库中,配置比较复杂,我想比较生产环境和测试环境的配置差异。针对这类需求,做法可能有几种:

2. 为什么要用 Workspace App 来做?

用 Workspace App 来做是因为 vibe coding 时代,写代码已经成本极低,AI 在短时间内完全可以做出一个专业的差异对比页面(当然你也可以 vibe coding 一个页面+本地 server 实现相同效果,但使用 Workspace App 的好处是能统一管理数据库凭证等信息)。

3. 怎么做?

丢一个 Workspace App 开发规范和示例给编码 agent ,再描述请求需求,让 AI 给你打工。喝喝咖啡上个 V2EX 摸一下鱼,一会赛博打工人就给你整好了。

说说为什么要选插件架构

先说个题外话:这个项目其实从去年就开始做了,之前选型用的是 tauri + sevlte ,当时选 sevlte 主要是看重它没有虚拟 dom 带来的高性能。但开发过程中一直没有解决 macos 上的焦点以及事件在父子组件之间传递的问题,进展缓慢。大概两个月前,决定重写,这次让 AI 参与技术选型决策,AI 选了 React😂。但确实换成 React 之后,很多之前一直没解决的问题一下子就容易解决起来了(当然也有模型能力提升的原因)。

趁着重写的契机,重新思考了软件架构,最终决定采用插件架构,主要考虑点有几个:

最后,说点开发过程中的体会

最最后,打个广告

v0.2.0 新功能

<video src="https://flyxl.github.io/datazen/assets/video/demo-recording.mp4" controls width="100%" poster="https://flyxl.github.io/datazen/assets/video/demo-poster.png"></video>

  1. 首次运行引导向导:3 步快速上手(连接示例库 → 探索 AI → 开始使用),8 种语言,状态可恢复。
  2. 4 模式执行策略:Run Current / Run All / Run Selection / Ask ,工具栏一键切换。
  3. SQL Snippets 管理:设置页自定义代码片段,实时注入编辑器补全。
  4. Paste as IN:Cmd+Shift+V 一键将多行文本转为 IN ('a', 'b')。
  5. 危险执行拦截:无 WHERE 的 UPDATE/DELETE 强制红色弹窗二次确认。
  6. 占位符防 NULL:未赋值参数直接拦截,防止隐式全表更新。
  7. Schema Diff DAG 拓扑排序:按外键依赖顺序生成 DDL ,避免引用目标缺失报错。
  8. Extension Points 热插拔:运行时加载 SQL Editor Pro 扩展,CodeMirror Compartment 动态重组。
  9. EP 签名验证:扩展包防篡改校验。
  10. 暗色主题全面刷新 + 亮色主题微调。
  11. i18n 领域包架构:14 个领域包按需惰性加载,首屏更小。
  12. 四维扩展体系:Driver / Theme / EP / Wapp ,为插件商店生态奠基。
  13. E2E 并行化:分组并行 + 每 worker 独立数据库,CI 更快更稳。
  14. 官网重塑:去 AI 味、Hero 重写、场景卡片、SEO 结构化数据。

一句话总结 DataZen 的定位: DataZen 适合作为日常开发、排查问题、本地调试时的一个轻快、顺手、不占内存的开源替代品。如果你的业务重度依赖复杂的数据库端存储过程编写或大型商业库,DataGrip 依然是更专业的选择;但如果你受够了厚重和慢,想找一个干净、轻量、平时挂在后台没负担的现代客户端,DataZen 会很适合你。


开源地址与下载

业余项目难免有考虑不周或者小 bug ,非常欢迎各位 V 友试用体验。如果遇到任何卡顿、报错,或者有想吐槽的交互,直接在帖子里回复或者提 GitHub Issue ,我都会认真拜读和迭代。

同时也欢迎各位一起来共建 DataZen ,做一款属于我们自己的软件!

谢谢大家!

1895 次点击
所在节点    程序员
13 条回复
zengxs
9 月 14 日
看来数据库管理 app 这个需求量确实很大,最近一个月已经看到至少 5 个这方向的项目了
flyxl
9 月 14 日
@zengxs 有没有可能是大家都觉得数据库管理软件容易搞而已(做得好其实挺难的)😂
zengxs
9 月 14 日
@flyxl 感觉可能是不同团队用数据库的方式千差万别,大家一看虽然现有 app 能跑,但在自己场景下可能还差点意思,就自己 vibe 一个

这个角度看插件化可能确实是一个解决方案,但是如何设计 app host 和插件的功能边界可能会比较难
FawkesV
9 月 14 日
不可避免要和 dbx 对比
FawkesV
9 月 14 日
其实我更想要一个像 idea 的轻量的 vibe coding 的编辑器,轻量 方便审核代码 ,偶尔也可以本地启动调试一下。idea 还是太重了
zengxs
9 月 14 日
@FawkesV #5 vibe 一个
flyxl
9 月 14 日
@FawkesV 之前看了一下 dbx 编辑器相关的源码,一个文件 7000 多行😂。我经常在手机上让 chatgpt 和 grok 通过 github connector 实现功能,文件太大了改不动,所以项目中有个要求是源码文件不能超过 800 行(拍脑袋决定的),方便让这俩哥们能顺利编辑文件
vexify
9 月 14 日
更想有 dbeaver cloud 那种功能,可以搭建出来有个 web 版本,可以管理 team ,然后成员加入后就可以查询,不用自己本地安装
lajfush
9 月 14 日
用着还不错呀,自我感觉比 Navicat Premium Lite 方便,还在习惯中
flyxl
9 月 14 日
@lajfush 感谢认可~
flyxl
9 月 14 日
@vexify 有在规划,不过目前一个人的精力有限,想优先打磨操作体验。Team 的需求不只是共享连接和数据库管理,更重要的是共享 SQL 语句、工作流、数据看板等。之前就有数据分析团队的 leader 问我能不能查看离职员工经常跑的 SQL 语句,感觉这个需求也确实是痛点之一
monkeydream
9 月 15 日
还不错,正在试用。
发现个使用小问题,连接这块不支持批量操作,导入错了没法批量删除,只能去修改 connection.json 文件。
另外能否做一个类似 navicat 的对象清单视图功能,能显示表列表、注释、大小等信息。
flyxl
9 月 15 日
@monkeydream 收到,我记下来了,感谢反馈!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1241952

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX