# 数据库类型功能差异分析 **分析日期**:2025-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 | | ~~标签页关联~~ | ⚠️ | ⚠️ | ⚠️ | ~~暂时移除多Tab支持,仅保留一个编辑区~~ | | ~~书签支持~~ | ❌ | ❌ | ❌ | ~~功能已删除~~ | | ~~模板支持~~ | ❌ | ❌ | ❌ | ~~功能已删除~~ | **图例**: - ✅ 完全支持 - ⚠️ 部分支持或需要特殊处理 - ❌ 不支持 --- ## 快速对比摘要 ### 核心差异 | 维度 | 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 核心差异点 1. **执行方式** - MySQL:标准SQL语句 - Redis:命令字符串解析 - MongoDB:JavaScript代码执行(待完善) 2. **数据库概念** - MySQL:逻辑数据库,包含表 - Redis:逻辑数据库(0-15),包含Key - MongoDB:逻辑数据库,包含集合 3. **数据结构** - MySQL:关系型,表格结构 - Redis:键值对,无固定结构 - MongoDB:文档型,JSON结构 4. **查询方式** - MySQL:SQL查询 - Redis:命令查询 - MongoDB:查询表达式 5. **结果格式** - MySQL:表格数据 - Redis:命令返回值 - MongoDB:文档数组 ### 3.2 统一处理策略 1. **结果类型统一**: - MySQL:`query`/`update` - Redis:`command` - MongoDB:`query`/`update` 2. **展示模式统一**: - 表格模式:适用于MySQL查询结果 - JSON模式:适用于Redis命令结果和MongoDB查询结果 3. **编辑器统一**: - 根据数据库类型自动切换语言模式 - 自动设置默认内容和按钮文本 4. **API接口统一**: - 所有数据库类型使用相同的API接口 - 内部根据类型分发到不同的实现 --- ## 四、功能完整性评估 ### 4.1 MySQL功能完整性:⭐⭐⭐⭐⭐ (100%) - ✅ 所有核心功能已实现 - ✅ 查询、更新、表结构、索引查询完整 - ✅ 编辑器支持完善 ### 4.2 Redis功能完整性:⭐⭐⭐⭐☆ (90%) - ✅ 核心功能已实现 - ⚠️ 索引查询不支持(Redis本身不支持) - ✅ 命令执行、Key列表、Key信息查询完整 ### 4.3 MongoDB功能完整性:⭐⭐⭐⭐☆ (85%) - ✅ 核心功能已实现 - ⚠️ 查询执行需要JSON格式(不支持直接执行Shell语法) - ✅ 集合列表、集合结构查询完整 - ⚠️ 索引查询包含在集合结构中(非独立接口) - ⚠️ 需要实现Shell语法到JSON的自动转换 --- ## 五、优化建议 ### 5.1 短期优化 1. **MongoDB查询执行优化**(高优先级) - 当前需要JSON格式,用户体验不佳 - 建议:实现MongoDB Shell语法到JSON的自动转换 - 方案1:集成JavaScript引擎(如goja)解析Shell语法 - 方案2:实现简单的语法解析器,支持常用操作 2. **Redis命令补全** - 添加Redis命令自动补全功能 - 建议:在编辑器中集成Redis命令提示 3. **MongoDB查询补全** - 添加MongoDB Shell语法补全 - 建议:在编辑器中集成MongoDB方法提示 ### 5.2 长期优化 1. **统一查询接口** - 考虑设计统一的查询语言或抽象层 - 当前各数据库使用不同的执行方式 2. **结果格式标准化** - 进一步统一结果格式,便于前端处理 - 当前已有统一的结果类型,但数据格式仍有差异 3. **性能优化** - Redis Key列表查询(大量Key时) - MongoDB集合结构查询(大量文档时) --- ## 六、总结 ### 6.1 功能支持情况 - **MySQL**:功能最完整,所有功能都已实现 - **Redis**:核心功能完整,索引查询不支持(Redis特性) - **MongoDB**:核心功能完整,查询执行待完善 ### 6.2 差异处理策略 - **统一接口**:所有数据库类型使用相同的API接口 - **类型分发**:内部根据数据库类型分发到不同实现 - **结果统一**:统一结果类型和展示模式 - **编辑器适配**:根据数据库类型自动适配编辑器 ### 6.3 后续工作 1. 完善MongoDB查询执行功能 2. 优化Redis大量Key查询性能 3. 添加命令/语法补全功能 4. 统一结果格式处理 --- **结论**:不同数据库类型的功能差异主要体现在执行方式、数据结构、查询方式等方面,但通过统一的接口设计和类型分发,实现了良好的功能支持。MySQL功能最完整,Redis和MongoDB核心功能已实现,部分功能待完善。