- 拆分 FileSystem.vue 为模块化组件架构 - 新增 Markdown Mermaid 图表渲染支持 - 新增 180+ 编程语言代码高亮 - 修复编辑/预览模式切换渲染问题 - 优化亮色/暗色模式主题适配 - 新增 TypeScript 类型定义
15 KiB
15 KiB
数据库类型功能差异分析
分析日期:2026-01-28
分析范围:MySQL、Redis、MongoDB 功能支持差异
一、功能支持对比表
| 功能模块 | MySQL | Redis | MongoDB | 说明 |
|---|---|---|---|---|
| 连接管理 | ||||
| 连接配置 | ✅ | ✅ | ✅ | 都支持主机、端口、用户名、密码;MySQL默认端口3306/用户root,Redis默认端口6379/DB0,MongoDB默认端口27017/用户admin |
| 数据库选择 | ✅ | ✅ | ✅ | MySQL/MongoDB=数据库名,Redis=DB编号(0-15);连接树中Redis显示为"DB 0"、"DB 1"等,支持切换 |
| 连接测试 | ✅ | ✅ | ✅ | 都支持连接测试 |
| SQL/命令执行 | ||||
| 查询执行 | ✅ | ✅ | ✅ | MySQL=SELECT,Redis=GET等,MongoDB=find |
| 更新执行 | ✅ | ✅ | ✅ | MySQL=INSERT/UPDATE/DELETE,Redis=SET等,MongoDB=insert/update |
| 结果类型 | query/update | command | query/update | MySQL区分查询/更新,Redis统一为command |
| 执行超时 | 30秒 | 30秒 | 30秒 | 统一超时时间 |
| 数据库列表 | ||||
| 获取数据库列表 | ✅ | ⚠️ | ✅ | Redis返回0-15,MySQL/MongoDB动态查询 |
| 数据库切换 | ✅ | ✅ | ✅ | 都支持切换数据库 |
| 表/集合/Key列表 | ||||
| 获取表列表 | ✅ | ✅ | ✅ | MySQL=表,Redis=Key,MongoDB=集合 |
| 懒加载 | ✅ | ✅ | ✅ | 都支持懒加载 |
| 模式匹配 | ❌ | ✅ | ❌ | Redis支持Key模式匹配 |
| 表结构查询 | ||||
| 表结构查询 | ✅ | ✅ | ✅ | MySQL=列信息,Redis=Key信息,MongoDB=集合结构 |
| 列信息 | ✅ | ❌ | ⚠️ | MySQL显示列详情,MongoDB显示字段统计 |
| 索引信息 | ✅ | ❌ | ✅ | MySQL/MongoDB支持,Redis不支持 |
| 文档示例 | ❌ | ❌ | ✅ | 仅MongoDB显示文档示例 |
| 索引查询 | ||||
| 索引列表 | ✅ | ❌ | ⚠️ | MySQL独立查询,MongoDB包含在集合结构中 |
| 索引详情 | ✅ | ❌ | ✅ | MySQL/MongoDB显示索引详情 |
| 编辑器支持 | ||||
| 语法高亮 | SQL | JavaScript | JavaScript | MySQL使用SQL,Redis/MongoDB使用JS |
| 默认内容 | select 1; |
GET key\nSET key value |
db.collection.find({}) |
根据类型自动设置 |
| 执行按钮文本 | "执行" | "执行命令" | "执行查询" | 根据类型自动设置 |
| 结果展示 | ||||
| 表格展示 | ✅ | ⚠️ | ⚠️ | MySQL适合表格,Redis/MongoDB适合JSON |
| JSON展示 | ⚠️ | ✅ | ✅ | Redis/MongoDB命令结果用JSON展示 |
| 统计信息 | ✅ | ✅ | ✅ | 都显示执行时间和影响行数 |
| 数据存储 | ||||
| SQL编辑器内容关联 | ✅ | ✅ | ✅ | 都支持SQL编辑器内容关联连接ID |
| ⚠️ | ⚠️ | ⚠️ | ||
| ❌ | ❌ | ❌ | ||
| ❌ | ❌ | ❌ |
图例:
- ✅ 完全支持
- ⚠️ 部分支持或需要特殊处理
- ❌ 不支持
快速对比摘要
核心差异
| 维度 | MySQL | Redis | MongoDB |
|---|---|---|---|
| 执行方式 | SQL语句 | 命令字符串 | JSON格式命令 |
| 数据结构 | 关系型表格 | 键值对 | 文档型JSON |
| 数据库概念 | 逻辑数据库 | DB编号(0-15) | 逻辑数据库 |
| 查询方式 | SQL查询 | 命令查询 | JSON命令 |
| 结果格式 | 表格数据 | 命令返回值 | 文档数组 |
| 语法高亮 | SQL | JavaScript | JavaScript |
| 结果展示 | 表格为主 | JSON为主 | JSON为主 |
功能完整性
- MySQL:⭐⭐⭐⭐⭐ (100%) - 功能最完整
- Redis:⭐⭐⭐⭐☆ (90%) - 核心功能完整,索引不支持(Redis特性)
- MongoDB:⭐⭐⭐⭐☆ (85%) - 核心功能完整,需要JSON格式(待优化)
二、详细功能差异分析
2.1 连接管理差异
MySQL
- 连接参数:主机、端口、用户名、密码、数据库名
- 数据库选择:通过数据库名选择,支持切换
- 连接方式:TCP连接,支持SSL(待实现)
- 连接池:支持连接复用
Redis
- 连接参数:主机、端口、密码、DB编号(0-15)
- 数据库选择:通过DB编号选择(0-15),共16个数据库
- 连接方式:TCP连接
- 连接池:支持连接复用
- 特殊说明:database字段存储DB编号(字符串格式)
MongoDB
- 连接参数:主机、端口、用户名、密码、数据库名(认证数据库)
- 数据库选择:通过数据库名选择,支持切换
- 连接方式:TCP连接,支持认证
- 连接池:支持连接复用
- 特殊说明:数据库名可作为认证数据库(authSource)
2.2 SQL/命令执行差异
MySQL
- 执行方式:标准SQL语句
- 语句类型:
- 查询:SELECT、SHOW、DESCRIBE、DESC、EXPLAIN
- 更新:INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等
- 结果类型:
query:查询结果,返回数据数组update:更新结果,返回影响行数
- 数据库参数:支持指定数据库执行(覆盖连接配置)
- 多语句支持:支持多条SQL语句(multiStatements)
Redis
- 执行方式:Redis命令(字符串解析)
- 命令格式:
命令名 参数1 参数2 ...(支持引号) - 命令类型:所有Redis命令(GET、SET、HGET、HSET、DEL等)
- 结果类型:
command:统一为命令结果,返回命令返回值
- 数据库参数:不支持(使用连接配置的DB编号)
- 命令解析:支持带引号的参数(单引号/双引号)
MongoDB
- 执行方式:JSON格式命令(当前实现)
- 命令格式:JSON对象,包含
op(操作类型)和操作参数 - 语句类型:
- 查询:
{"op": "find", "collection": "users", "filter": {}} - 更新:
{"op": "insertOne", "collection": "users", "document": {}}
- 查询:
- 结果类型:
command:统一为命令结果,根据操作类型确定影响行数
- 数据库参数:支持指定数据库执行(覆盖连接配置)
- 特殊说明:当前使用JSON格式,前端编辑器显示JavaScript语法(MongoDB Shell风格),但实际执行需要转换为JSON格式
2.3 数据库列表差异
MySQL
- 获取方式:
SHOW DATABASES - 返回结果:数据库名称数组
- 动态查询:实时查询服务器上的数据库
- 权限控制:根据用户权限显示可见数据库
Redis
- 获取方式:固定返回0-15
- 返回结果:
["0", "1", "2", ..., "15"] - 特殊说明:Redis有16个逻辑数据库,编号0-15
- 实现方式:不查询服务器,直接返回固定列表
MongoDB
- 获取方式:
client.ListDatabases() - 返回结果:数据库名称数组
- 动态查询:实时查询服务器上的数据库
- 权限控制:根据用户权限显示可见数据库
2.4 表/集合/Key列表差异
MySQL
- 获取方式:
SHOW TABLES - 返回结果:表名数组
- 数据库参数:必须指定数据库
- 懒加载:展开数据库节点时加载
Redis
- 获取方式:
KEYS *或模式匹配 - 返回结果:Key名数组
- 数据库参数:使用连接配置的DB编号
- 模式匹配:支持
KEYS pattern(如KEYS user:*) - 性能注意:大量Key时可能较慢
MongoDB
- 获取方式:
db.ListCollectionNames() - 返回结果:集合名数组
- 数据库参数:必须指定数据库
- 懒加载:展开数据库节点时加载
2.5 表结构查询差异
MySQL
- 获取方式:
DESCRIBE table_name或SHOW COLUMNS FROM table_name - 返回内容:
- 字段名(Field)
- 类型(Type)
- 是否为空(Null)
- 键信息(Key)
- 默认值(Default)
- 额外信息(Extra)
- 数据格式:结构化列信息数组
Redis
- 获取方式:
TYPE key、TTL key、MEMORY USAGE key - 返回内容:
- Key类型(string、hash、list、set、zset等)
- TTL(过期时间)
- 值大小(内存占用)
- 数据格式:Key信息对象
MongoDB
- 获取方式:
db.collection.find().limit(5)+ 统计信息 - 返回内容:
- 文档示例(最多5个)
- 字段统计信息
- 索引信息(索引名、唯一性、键定义)
- 文档总数
- 数据格式:集合结构对象(包含多个子对象)
2.6 索引查询差异
MySQL
- 获取方式:
SHOW INDEX FROM table_name - 返回内容:
- 索引名(Key_name)
- 列名(Column_name)
- 唯一性(Non_unique)
- 索引类型(Index_type)
- 排序方式(Collation)
- 数据格式:索引信息数组
Redis
- 支持情况:❌ 不支持索引
- 返回结果:空数组
[] - 说明:Redis是键值存储,没有索引概念
MongoDB
- 获取方式:包含在集合结构中(
GetCollectionStructure) - 返回内容:
- 索引名
- 唯一性
- 键定义(字段和排序方向)
- 数据格式:索引信息数组(从集合结构中提取)
- 特殊说明:不提供独立的索引查询接口,索引信息包含在表结构查询中
2.7 编辑器支持差异
MySQL
- 语言模式:SQL语法高亮
- 默认内容:
select 1; - 执行按钮:
执行 - 语法特性:标准SQL语法,支持多语句
Redis
- 语言模式:JavaScript语法高亮(用于命令编辑)
- 默认内容:
GET key SET key value HGET hash field - 执行按钮:
执行命令 - 语法特性:命令格式,支持引号参数
MongoDB
- 语言模式:JavaScript语法高亮(MongoDB Shell语法,用于编辑)
- 默认内容:
db.collection.find({}) // 示例:db.users.find({name: "John"}) - 执行按钮:
执行查询 - 语法特性:编辑器显示MongoDB Shell语法,但实际执行需要转换为JSON格式(待实现自动转换)
- 当前限制:需要手动输入JSON格式命令,不支持直接执行Shell语法
2.8 结果展示差异
MySQL
- 展示模式:主要使用表格模式
- 数据格式:二维数组(行×列)
- 列定义:自动从查询结果生成
- 统计信息:行数、执行时间
- JSON模式:可选,用于特殊查询结果
Redis
- 展示模式:主要使用JSON模式
- 数据格式:命令返回值(可能是字符串、数字、数组等)
- 统计信息:执行时间(RowsAffected固定为1)
- 表格模式:不适用(Redis结果不是表格结构)
MongoDB
- 展示模式:JSON模式为主,表格模式可选
- 数据格式:文档数组(BSON转换为JSON)
- 列定义:查询结果为空时无列定义
- 统计信息:文档数、执行时间
- 表格模式:适用于简单查询结果
三、实现差异总结
3.1 核心差异点
-
执行方式
- MySQL:标准SQL语句
- Redis:命令字符串解析
- MongoDB:JavaScript代码执行(待完善)
-
数据库概念
- MySQL:逻辑数据库,包含表
- Redis:逻辑数据库(0-15),包含Key
- MongoDB:逻辑数据库,包含集合
-
数据结构
- MySQL:关系型,表格结构
- Redis:键值对,无固定结构
- MongoDB:文档型,JSON结构
-
查询方式
- MySQL:SQL查询
- Redis:命令查询
- MongoDB:查询表达式
-
结果格式
- MySQL:表格数据
- Redis:命令返回值
- MongoDB:文档数组
3.2 统一处理策略
-
结果类型统一:
- MySQL:
query/update - Redis:
command - MongoDB:
query/update
- MySQL:
-
展示模式统一:
- 表格模式:适用于MySQL查询结果
- JSON模式:适用于Redis命令结果和MongoDB查询结果
-
编辑器统一:
- 根据数据库类型自动切换语言模式
- 自动设置默认内容和按钮文本
-
API接口统一:
- 所有数据库类型使用相同的API接口
- 内部根据类型分发到不同的实现
四、功能完整性评估
4.1 MySQL功能完整性:⭐⭐⭐⭐⭐ (100%)
- ✅ 所有核心功能已实现
- ✅ 查询、更新、表结构、索引查询完整
- ✅ 编辑器支持完善
4.2 Redis功能完整性:⭐⭐⭐⭐☆ (90%)
- ✅ 核心功能已实现
- ⚠️ 索引查询不支持(Redis本身不支持)
- ✅ 命令执行、Key列表、Key信息查询完整
4.3 MongoDB功能完整性:⭐⭐⭐⭐☆ (85%)
- ✅ 核心功能已实现
- ⚠️ 查询执行需要JSON格式(不支持直接执行Shell语法)
- ✅ 集合列表、集合结构查询完整
- ⚠️ 索引查询包含在集合结构中(非独立接口)
- ⚠️ 需要实现Shell语法到JSON的自动转换
五、优化建议
5.1 短期优化
-
MongoDB查询执行优化(高优先级)
- 当前需要JSON格式,用户体验不佳
- 建议:实现MongoDB Shell语法到JSON的自动转换
- 方案1:集成JavaScript引擎(如goja)解析Shell语法
- 方案2:实现简单的语法解析器,支持常用操作
-
Redis命令补全
- 添加Redis命令自动补全功能
- 建议:在编辑器中集成Redis命令提示
-
MongoDB查询补全
- 添加MongoDB Shell语法补全
- 建议:在编辑器中集成MongoDB方法提示
5.2 长期优化
-
统一查询接口
- 考虑设计统一的查询语言或抽象层
- 当前各数据库使用不同的执行方式
-
结果格式标准化
- 进一步统一结果格式,便于前端处理
- 当前已有统一的结果类型,但数据格式仍有差异
-
性能优化
- Redis Key列表查询(大量Key时)
- MongoDB集合结构查询(大量文档时)
六、总结
6.1 功能支持情况
- MySQL:功能最完整,所有功能都已实现
- Redis:核心功能完整,索引查询不支持(Redis特性)
- MongoDB:核心功能完整,查询执行待完善
6.2 差异处理策略
- 统一接口:所有数据库类型使用相同的API接口
- 类型分发:内部根据数据库类型分发到不同实现
- 结果统一:统一结果类型和展示模式
- 编辑器适配:根据数据库类型自动适配编辑器
6.3 后续工作
- 完善MongoDB查询执行功能
- 优化Redis大量Key查询性能
- 添加命令/语法补全功能
- 统一结果格式处理
结论:不同数据库类型的功能差异主要体现在执行方式、数据结构、查询方式等方面,但通过统一的接口设计和类型分发,实现了良好的功能支持。MySQL功能最完整,Redis和MongoDB核心功能已实现,部分功能待完善。