Private
Public Access
1
0
Files
u-desk/docs/04-功能迭代/GO-DESK-2.数据库客户端/设计文档/需求设计/数据库类型功能差异分析.md

15 KiB
Raw Blame History

数据库类型功能差异分析

分析日期2025-01-28
分析范围MySQL、Redis、MongoDB 功能支持差异


一、功能支持对比表

功能模块 MySQL Redis MongoDB 说明
连接管理
连接配置 都支持主机、端口、用户名、密码MySQL默认端口3306/用户rootRedis默认端口6379/DB0MongoDB默认端口27017/用户admin
数据库选择 MySQL/MongoDB=数据库名Redis=DB编号(0-15)连接树中Redis显示为"DB 0"、"DB 1"等,支持切换
连接测试 都支持连接测试
SQL/命令执行
查询执行 MySQL=SELECTRedis=GET等MongoDB=find
更新执行 MySQL=INSERT/UPDATE/DELETERedis=SET等MongoDB=insert/update
结果类型 query/update command query/update MySQL区分查询/更新Redis统一为command
执行超时 30秒 30秒 30秒 统一超时时间
数据库列表
获取数据库列表 ⚠️ Redis返回0-15MySQL/MongoDB动态查询
数据库切换 都支持切换数据库
表/集合/Key列表
获取表列表 MySQL=表Redis=KeyMongoDB=集合
懒加载 都支持懒加载
模式匹配 Redis支持Key模式匹配
表结构查询
表结构查询 MySQL=列信息Redis=Key信息MongoDB=集合结构
列信息 ⚠️ MySQL显示列详情MongoDB显示字段统计
索引信息 MySQL/MongoDB支持Redis不支持
文档示例 仅MongoDB显示文档示例
索引查询
索引列表 ⚠️ MySQL独立查询MongoDB包含在集合结构中
索引详情 MySQL/MongoDB显示索引详情
编辑器支持
语法高亮 SQL JavaScript JavaScript MySQL使用SQLRedis/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_nameSHOW COLUMNS FROM table_name
  • 返回内容
    • 字段名Field
    • 类型Type
    • 是否为空Null
    • 键信息Key
    • 默认值Default
    • 额外信息Extra
  • 数据格式:结构化列信息数组

Redis

  • 获取方式TYPE keyTTL keyMEMORY 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命令字符串解析
    • MongoDBJavaScript代码执行待完善
  2. 数据库概念

    • MySQL逻辑数据库包含表
    • Redis逻辑数据库0-15包含Key
    • MongoDB逻辑数据库包含集合
  3. 数据结构

    • MySQL关系型表格结构
    • Redis键值对无固定结构
    • MongoDB文档型JSON结构
  4. 查询方式

    • MySQLSQL查询
    • Redis命令查询
    • MongoDB查询表达式
  5. 结果格式

    • MySQL表格数据
    • Redis命令返回值
    • MongoDB文档数组

3.2 统一处理策略

  1. 结果类型统一

    • MySQLquery/update
    • Rediscommand
    • MongoDBquery/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核心功能已实现部分功能待完善。