>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
JavaScript

DbGate:Web 与桌面通用的数据库客户端

通常,现代后端技术栈不会局限于单一的 DBMS。一个项目可能同时使用 PostgreSQL 处理主关系模型、Redis 做缓存和会话、ClickHouse 分析日志、MongoDB 存储非结构化文档。在这种情况下,打开四个不同的重型客户端或保持多个 DBeaver 标签页可不是什么愉快的体验。

最近我偶然发现了 DbGate。这是一个采用 GPL-3.0 协议的项目,旨在用统一的方式解决数据库混用问题。最有趣的是,这个客户端既可以作为 Electron 桌面应用程序使用,也可以作为 Docker 容器中的轻量级 Web 界面使用,而且两种方式体验一致。

项目功能

DbGate 同时支持 SQL 和 NoSQL 数据源。兼容的数据库包括 Postgres、MySQL、SQLite、SQL Server、Oracle、MariaDB、ClickHouse、DuckDB、CockroachDB、Firebird、Cassandra、MongoDB 和 Redis。

该工具可以处理日常数据管理,还提供多项非标准功能:

  • 通过外键关系导航。在表视图中,可以直接从某行展开关联表中的子记录(主从视图),或通过外键拉取列而无需手动编写 JOIN。
  • 查看和编辑数据并生成变更脚本。点击单元格、编辑值后,在发送到数据库之前可以审查生成的 SQL 补丁。
  • 可视化查询构建器。如果你懒得手动编写冗长的表达式,可以用鼠标勾勒查询结构,包括带 WHERE NOT EXISTS 的选择查询。
  • 内置 NDJSON、JSON、CSV 和 Excel 文件查看器。大型 NDJSON 文件甚至可以直接在磁盘上打开和编辑,无需预先导入。
  • ER 图和模式比较,可生成迁移同步脚本。
  • 针对 GEO 列的地图数据可视化,以及可导出 HTML 的简单图表构建。

架构原理

项目底层采用了非常实用的技术栈:

  • 前端使用 Svelte 编写。界面响应迅速,不会被不必要的 DOM 节点弄得杂乱无章,能快速渲染大型虚拟化表格。
  • 后端运行在 Node.js 和 Express 上,使用标准数据库连接器。
  • 桌面版构建通过 Electron 封装,支持 Windows、Linux 和 macOS。

模块化设计很有意思。许多实用工具被拆分为独立的 NPM 包。例如,如果你需要定时 CSV 数据导出管道,Node.js 脚本可以在服务器上独立运行,无需图形界面。

此外还实现了插件系统。通过用 TypeScript 或 JavaScript 编写一个小模块,就可以插入自定义驱动或添加稀有文件格式的解析器。

快速启动

如果你想不安装就试用客户端,最简单的方式是在 Docker 中启动 Web 版本:

docker run -it --name dbgate-instance --restart always -p 3000:3000 dbgate/dbgate

之后在浏览器中打开 http://localhost:3000,即可连接本地或远程数据库。

对于想要本地构建项目并深入研究源代码的人:

git clone https://github.com/dbgate/dbgate.git
cd dbgate
yarn
yarn start

该命令将在 3000 端口启动后端,在 5001 端口启动 Web 界面。

使用场景

实际上,DbGate 出色地覆盖了两类任务:

  1. 个人开发者工具。可以替代 DBeaver、RedisInsight 和 MongoDB Compass 的组合,而且启动时不会吞噬数 GB 的内存。
  2. 内部团队服务器仪表板。通过在封闭网络中启动 Docker 镜像,可以让分析师和开发人员通过统一的 Web 界面访问数据库,无需每个人单独配置 SSH 隧道和本地工具。

适用人群

如果你受够了重型 Java 客户端的缓慢启动,或在 Redis 和 PostgreSQL 的独立程序之间来回切换,DbGate 绝对值得一试。该项目正在积极开发中,采用自由许可证分发,同时提供桌面版和服务器版。

相关项目