- 补入库:server/internal/db/dump.go、redis 分页/扫描预算测试、opsxdb-mcp main_test、 packages/opsxdb-mcp package-lock、docs 审计与对比文档等 37 个新文件 - 含结构扁平化进行中的 80 处修改与 155 处旧结构删除(server/ src/ src-tauri/ 为当前有效源) - 构建产物(bin/target/dist)与签名私钥仍按规则排除
9.6 KiB
高频数据库操作评审:OpsxDB / DBX / DBeaver
更新:2026-10-15。依据当前工作区的 OpsxDB 根级 src/、server/,以及 /Users/logan/devops/demo/db-gui/dbx、/Users/logan/devops/demo/db-client/dbeaver 的源码和随库文档。这是静态代码评审与产品取舍,不是三个桌面程序的同机实测,也不是所有驱动的兼容性认证。 分数只针对日常关系数据库工作流;AI/MCP、Redis 等差异化能力在下文单列,不靠第三方插件数量加分。参考项目自身的文档陈述若未在本轮实测,以“源码中有路径”评价。
评分口径
每项满分是该列权重;一条功能只存在入口或说明但缺执行、错误恢复和验证时扣分。结果集“筛选已加载行”不等于数据库服务端过滤;限量 SQL 导出不等于可恢复备份。下表为评审判断值,允许在真库与桌面验收后修订,不能与 2026-10-14 的 GUI 布局评分混用。
| 维度(满分) | OpsxDB | DBX | DBeaver | 主要判断 |
|---|---|---|---|---|
| 连接、对象树与上下文(15) | 12 | 14 | 14 | OpsxDB 已有多连接、库/表/列及索引/外键/触发器目录和带库标签;PG Schema 与真实驱动目录仍需验收;两参照项目对象导航与目标上下文更完整 |
| SQL 编辑、会话与事务(20) | 11 | 18 | 18 | OpsxDB 有选区/当前语句执行、格式化、历史、切库、取消与危险确认;尚无可靠跨请求手动事务;DBX 有标签专用事务会话,DBeaver 有自动提交切换和事务监视 |
| 表设计与数据编辑(20) | 12 | 18 | 19 | OpsxDB 有字段/主键、MySQL 普通索引设计及有主键的单元格改/删;缺新增行、批量暂存提交、外键编辑,PG/SQLite 索引只读;参照项目有更完整的编辑持久化路径 |
| 导入、导出与恢复(20) | 7 | 18 | 18 | OpsxDB 有结果与整表导出、单表 SQL 三态转储,缺 CSV 导入、完整备份与恢复;DBX 有表导入、数据传输和 MySQL/PG 备份,DBeaver 有数据传输向导与 MySQL/PG 原生备份向导 |
| 结果集高频交互与大数据(15) | 11 | 13 | 13 | OpsxDB 有复制/右键、局部筛选排序、分页与继续显示,但服务端按 offset 丢弃前面行;两参照项目有更丰富的过滤、行状态与任务反馈 |
| 失败反馈、回归证据与操作安全(10) | 5 | 7 | 9 | OpsxDB 有危险确认与部分单测,桌面及真库矩阵尚未闭环;DBX 有事务/导入/比较专门回归,DBeaver 的持久化器含行标识校验、部分提交与回滚处理。此项不代表本轮运行了第三方测试 |
| 合计 / 100 | 58 | 88 | 91 | 能力覆盖与闭环成熟度的当前估计,不是视觉评分或性能基准 |
OpsxDB 的优势是轻量的连接→对象→查询主路径、Redis 键操作、Ask/Agent 与 MCP 同一会话工具边界;后两项没有纳入上述关系库同口径打分。DBeaver 覆盖广而操作层级多;DBX 的步骤式迁移和上下文入口值得借鉴。OpsxDB 应保持日常操作短路径,复杂任务才进入向导。
对照后最值得补的能力
| 频率 / 优先级 | OpsxDB 当前缺口与影响 | 参考代码证据 | 适合 OpsxDB 的实现范围 |
|---|---|---|---|
| 高频 P0:新增/修改/删除一批数据 | src/ResultPane.tsx 有主键写回和删除,空输入转 NULL,单元格写入立即提交;没有新增行与可查看的待提交改动。粘贴多格失败时需明确哪些已写入,不能用旧结果覆盖后来的成功写回 |
DBX apps/desktop/src/lib/dataGrid/dataGridContextMenu.ts 有 clone/restore/delete、NULL/筛选操作;DBeaver plugins/org.jkiss.dbeaver.ui.editors.data/.../ResultSetPersister.java 区分 insert/update/delete,并对缺少唯一行标识拒绝删除 |
先做“新增行、显式 NULL、改动预览、保存/撤销”;事务支持前明示逐行立即生效和部分失败。限制表来源与主键,避免任意 JOIN 结果写回 |
| 高频 P0:导入 CSV 到已有表 | 无数据导入向导;手工写 INSERT 成本高,易错 | DBX crates/dbx-core/src/data/table_import.rs、crates/dbx-web/src/routes/table_import.rs 与 docs/content/docs/table-import.cn.mdx;DBeaver plugins/org.jkiss.dbeaver.data.transfer.ui/.../DataTransferWizard.java |
从表右键进入,文件预览→编码/表头/分隔符→字段映射与 NULL→目标复核→分批写入/进度/取消/错误行;先支持 MySQL/PG/SQLite 的 CSV,测试事务及失败行语义 |
| 高频 P0:可控事务 | server/internal/db/session.go 按库缓存 *sql.DB 连接池,server/internal/db/ops.go 每次通过池执行;连发 BEGIN、DML、ROLLBACK 不能保证同一物理连接。前端没有会话绑定的提交/回滚状态 |
DBX crates/dbx-core/tests/live_manual_transaction.rs、apps/desktop/src/components/layout/EditorToolbar.vue;DBeaver plugins/org.jkiss.dbeaver.core/.../DataSourceTransactionModeContributor.java 与 .../TransactionMonitorToolbar.java |
先设计每查询标签独占 *sql.Conn/*sql.Tx 的本机事务句柄,再开放手动模式和提交/回滚。连接/库切换、关闭标签、超时、取消、断连与提交响应未知均有状态处理;事务内不隐式重试。MySQL DDL 的隐式提交单独提示。不能先只加按钮或直接发送 BEGIN |
| 高频 P1:备份与恢复 | server/internal/db/dump.go 仅单表 SQL 转储;整表 CSV/JSON 上限 500000 行,达到上限未明确是否截断;没有整库一致性备份、依赖顺序或恢复验证 |
DBX docs/content/docs/database-backup.cn.mdx、crates/dbx-core/src/scheduled_backup/engine.rs;DBeaver plugins/org.jkiss.dbeaver.ext.mysql.ui/.../MySQLExportWizard.java、plugins/org.jkiss.dbeaver.ext.postgresql.ui/.../PostgreBackupWizard.java |
先 MySQL/PG 手动逻辑备份,列出范围、对象与输出文件并做空库恢复演练;查询导出达到上限明确标注不完整。定时与保留策略后置,桌面退出不承诺继续运行 |
| 中频 P1:表设计变更可靠性 | 设计器有 DDL 预览,但读取后到应用前未重新校验结构;MySQL 索引支持常见类型,PG/SQLite 索引与外键只读 | DBX crates/dbx-sql-schema/src/table_structure_sql/、结构编辑器的验证与 SQLite 重建路径;DBeaver 对象属性编辑路径 |
先校验元数据版本/快照与实际目标,处理复合主键和默认值;PG 普通索引、外键在真库验收后分方言开放。危险 DDL 展示影响与失败后的状态,不追求一次支持所有约束 |
| 中频 P1:服务端筛选和高效翻页 | src/ResultPane.tsx 的筛选/排序作用于已加载行;server/internal/db/ops.go 的 offset 在结果扫描中逐行跳过,深页成本增长,重跑查询可能读到变化后的数据 |
DBX apps/desktop/src/lib/dataGrid/dataGridContextMenu.ts 的筛选菜单与数据网格;DBeaver 结果集查看/编辑组件 |
表数据增加列条件筛选与稳定排序,清楚标示“当前页”或“全表”;按方言生成带 LIMIT/OFFSET 的安全查询,深页考虑主键游标。不将任意 SQL 重写成服务端过滤 |
| 中频 P1–P2:比较/迁移 | OpsxDB 无结构比较/数据比较、跨连接传输;SQL 文件导入也未形成完整解析和进度路径 | DBX crates/dbx-core/src/data/data_compare.rs、apps/desktop/src/components/diff/DataCompareDialog.vue、crates/dbx-core/src/data/transfer.rs;DBeaver plugins/org.jkiss.dbeaver.cmp.simple.ui/.../CompareObjectsWizard.java |
先做只读结构差异;数据比较限定同构、唯一键、行数上限并展示样本;跨库传输与同步等 CSV 导入/备份闭环后再排期 |
路径中 ... 表示相应插件包内的 src/org/jkiss/dbeaver/ 前缀,并非 OpsxDB 文件。完整库/表缺项及现有功能参阅 DATABASE-OPERATIONS-AUDIT.md。DBX 表导入文档与核心实现对应,但其 SQL 导入限定字面量 INSERT,不能据此推断任意 SQL 脚本恢复已经通用可用;“可导出 SQL”也不能推断“已验证可恢复”。
项目决策与验收门槛
- 先补可信的数据操作:表网格新增行和明确 NULL;校验主键、唯一行定位、并发变化与多行部分失败。若暂存/批量保存需依赖事务,先把服务器独占连接与标签生命周期打通,再显示“保存/撤销”;与普通 SQL 的手动事务可以共用句柄层,UI 保持简单。
- CSV 导入做一条完整路径:从表右键进预填目标的向导,不加额外主工具栏按钮。测试 UTF-8/GBK、引号换行、空串与 NULL、自增/默认字段、重复键、取消、断连和错误行定位;明确每批是否已提交,输出成功/跳过/失败行数。
- 加固现有出口:整表导出区分“达到行上限”与“完整”;导出失败/取消不留下貌似成功的文件。随后再做 MySQL/PG 的单次整库备份与空库恢复演练,备份内容与对象范围可核对。
- 依赖真库的结构工作随后做:MySQL 8.4/MariaDB 11/PG 16/SQLite 的新建→改字段/主键/索引→刷新/重连、并发结构变动、无权限和特殊标识符。结构比较先只读;数据比较、XLSX、跨连接复制、定时任务为后续选项。
本次只读核查三份本地源码,未运行 DBX、DBeaver;未将 OpsxDB 桌面视觉/右键或 MySQL/Redis Agent 真库测试记为通过。当前 Computer Use 访问 OpsxDB 曾被自动审批拒绝,且此前隔离环境不能连接本机数据库;这些验收应在可访问的本机桌面环境补做。此评审不改变 homepage/ 或产品形态:官网与文档在浏览器,数据库操作仍只走 Tauri 桌面。