XiaDB 列依据 v1.5 实际实现;其余各列依据截至 2026-08 的公开资料整理,仅供选型参考,如与官方最新信息不符以官方为准。
| 维度 | XiaDB v1.5 | MySQL 8.x | MariaDB 11.x | Oracle 19c / 23ai | TiDB 8.x |
|---|---|---|---|---|---|
| 厂商 / 来源 | 全栈自主研发 | Oracle 公司 | MariaDB 基金会 | Oracle 公司 | PingCAP |
| 部署形态 | 单机嵌入(一个 exe)与分布式集群同内核,平滑起步 | 单机为主;主从 / InnoDB Cluster | 单机为主;主从 / Galera 多主 | 单机、RAC 共享存储、Data Guard | 原生分布式,生产通常 6 节点起 |
| 运行时依赖 | 零第三方依赖;Windows 全静态 ~6 MB 单文件 | 依赖系统库与安装包体系 | 同 MySQL | 安装包数 GB 级,组件众多 | 多组件,经 tiup / k8s 部署 |
| 客户端协议 | MySQL wire protocol,可选 TLS | MySQL 协议 | MySQL 协议 | 专有 TNS / OCI(ojdbc) | MySQL 协议 |
| SQL 方言 | 双方言:MySQL + Oracle(同引擎切换) | MySQL | MySQL + Oracle 兼容模式 | Oracle SQL | MySQL 为主 |
| 事务 / 隔离 | MVCC 快照隔离,提交时冲突检测(乐观) | MVCC + 悲观行锁,默认 RR | 同 MySQL | MVCC,默认 RC,行锁等待 | MVCC + Percolator,悲观 / SI 可选 |
| 存储过程 / PL-SQL | MySQL 存储过程 + 自研 Oracle PL/SQL 引擎 | 存储过程、触发器、事件 | 存储过程 + PL/SQL 子集 | 完整 PL/SQL(业界最强) | 不支持存储过程 / 触发器 |
| 分布式与高可用 | multi-raft 三副本、分裂合并、跨 region 2PC、PD 自愈 | 组复制 InnoDB Cluster(需中间件分库分表) | Galera 多主 / 主从(不分片) | RAC + Data Guard;Sharding 需额外方案 | 原生分片 + raft + 分布式事务(最成熟) |
| 时序能力 | 时间分区 + 裁剪 ~26× + TTL 整分区 O(1) 淘汰 | 分区表;无内建 TTL | 分区表;系统版本表;无 TTL | 分区表 + ILM(企业特性) | 分区表 + TTL 表(v6.5+) |
| 数据字典 / 生态 | information_schema + Oracle 字典 48 项 + 内嵌 Web 控制台 | 完整 schema;工具生态最广 | 同 MySQL | 完整字典 / AWR / OEM | information_schema + Dashboard / Grafana |
| 安全与加密 | 口令认证 + SM4 TDE + 国密 SM2/3/4 函数 + TLS | 认证插件 / 角色;企业版 TDE;TLS | 类似 MySQL;社区 TDE;TLS | 最完备(VPD/审计/TDE,多为付费) | 用户权限 + 静态加密 + TLS |
| 许可证 | 目标 Apache-2.0(全库无 GPL) | GPLv2 + 商业双许可 | GPLv2 | 商业闭源(按核 / 用户计费) | Apache-2.0 |
| 最低资源占用 | 单机 2 核 / 2 GB 起;本体一个 ~6 MB 二进制 | 1–2 GB 内存;安装包数百 MB | 同 MySQL | 数 GB 占用;内存 4 GB 起 | 单 TiKV 官方建议 16 GB+ 内存 |
| 性能定位 | 写密集:引擎 ~2× RocksDB;单机写 / 点查达 MySQL 级 | 单机 OLTP 成熟基线 | 与 MySQL 同级 | 单机 / RAC OLTP 商业标杆 | 分布式扩展强;单机延迟高于单机库 |
← 表格可横向滑动查看全部 13 个对比维度。完整逐维度说明见产品技术白皮书与 docs/comparison.md。

三层 shared-nothing 架构:SQL 层经 xrpc 访问存储层,计算下推至 store,PD 统管元数据与调度

每个 region 一个 Raft 组:主节点向从节点复制日志,多数派确认即提交

MVCC 多版本快照隔离:读取指定快照时间戳的版本,读写不互相阻塞
全部性能数据均为同机 A/B 实测,注明环境与负载,短板照实公开——这是本项目坚持的"诚实基准"文化。
存储引擎、SQL 解析执行、MySQL 协议、RPC、序列化、Raft 共识、国密算法、Web 控制台——全部从零自研,约 3.6 万行 C++。二进制仅链接 libc/libstdc++。
同一引擎同时提供 MySQL 与 Oracle 方言,参数或会话级切换。以 MySQL 生态承接存量 Oracle 应用:换驱动,SQL 尽量不改。
--sql_dialect=oracle 一个参数切换全链路同机同负载 A/B 实测:存储引擎 xiadb-lsm 相对 RocksDB(TiKV/CockroachDB 底层引擎)异步批写约 2.0×、随机点查约 2.2×、全量扫描约 2.4× 领先。
多用户口令认证与权限管理,透明静态数据加密(TDE,密钥不落盘),自研国密算法 SQL 函数(经官方测试向量验证),可选 TLS 1.2+ 加密链路。
定位是"换驱动、SQL 不改":应用把 ojdbc/OCI 换成 MySQL 系驱动,服务端以 --sql_dialect=oracle 启动即按 Oracle 方言全链路解析。以下差异按"诚实清单"体例逐项列出,迁移评审时须逐条确认。
NUMBER(38) 精度、''=NULL、|| 拼接、DUAL / ROWNUM / SEQUENCE、TO_CHAR / TO_DATE 格式模型、MERGE INTO、CONNECT BY 层次查询、48 项数据字典视图、ORA- 错误码全链路;自研 PL/SQL 引擎(过程/函数/包/显式游标/异常/DBMS_* 内置包/触发器)。
走 MySQL wire protocol(默认明文,可选 TLS),因此不支持 TNS / ojdbc / OCI——这是"换驱动"这一步的由来,也是唯一必须改动的接入点。Connector/J、PyMySQL、go-sql-driver、MySqlConnector 等均按 MySQL 端点接入。
| 类别 | 已知差异 | 说明 / 建议 |
|---|---|---|
| 接入 | 不支持 TNS 协议 / ojdbc / OCI | 必须换 MySQL 系驱动接入 |
| 接入 | SQLSTATE 由驱动推导 | 错误以 ORA 号 + ORA-nnnnn: 消息传递,SQLSTATE 统一 HY000 族;依赖 SQLSTATE 分支的代码改判 errno |
| 并发 | 写冲突为提交时检测,非行锁等待 | 两事务改同一行时后提交者收 ORA-00060,应用需重试;无锁等待 / 死锁检测语义 |
| 并发 | READ COMMITTED 为"每语句新快照"近似 | 无 Oracle 的语句级重启(statement restart)语义 |
| 伪列 | ROWID 非 18 字符 Base64 格式 | 是内部行号;仅"同语句回查/点更新"可用,勿持久化或跨会话使用 |
| SQL | 优化器 hint /*+ ... */ 吞掉不生效 | 语句可执行,但无计划干预能力 |
| SQL | (+) 仅支持 WHERE 顶层 AND 形态 | 复杂嵌套 OR 中的 (+) 需改写为 ANSI JOIN |
| SQL | ORDER SIBLINGS BY 按普通 ORDER BY 处理 | 树形展示顺序可能与 Oracle 不同 |
| schema | 单命名空间:schema 前缀接受但指向同一对象 | a.t 与 b.t 是同一张表;依赖多 schema 隔离的部署需拆库 |
| 对象 | GTT 无会话数据隔离 | ON COMMIT DELETE ROWS 在事务结束清空,但多个并发会话看得到彼此的行 |
| 对象 | 物化视图仅全量刷新 | REFRESH FAST/ON COMMIT 选项接受但按 COMPLETE 全量重建执行 |
| 类型 | NUMBER 上限 38 位;无独立 INTERVAL / TIMESTAMP WITH TIME ZONE | TIMESTAMP 按 DATETIME 语义处理,时区由应用侧管理 |
| NLS | 仅 NLS_DATE_FORMAT / NLS_TIMESTAMP_FORMAT 生效 | 其余 NLS 参数接受但忽略,固定 AMERICAN/AMERICA/AL32UTF8 |
| PL/SQL | 包重载按实参个数决议,不按类型 | 同参数个数不同类型的重载需改名 |
| PL/SQL | 无 REF CURSOR / BULK COLLECT / FORALL / 自治事务 / DBMS_JOB | 涉及者需改写 |
| 触发器 | 支持 BEFORE/AFTER、行级/语句级、:NEW/:OLD、WHEN | 无 INSTEAD OF / 复合触发器(compound trigger) |
| 字典 | 字典视图为元数据合成,覆盖 48 项常用视图 | 冷门视图(USER_TAB_PRIVS、*_SEGMENTS 等)不存在;owner 恒为 XIADB |
| 安全 | 角色权限按全局权限位近似 | 无对象级 GRANT 粒度(表级 GRANT 语法接受、按全局位生效) |
完整迁移指南与错误码对照见 docs/oracle-compat.md。
以下均为同机同负载 A/B 对照实测(WSL2 受控环境,绝对值随硬件缩放)。完整方法与可复测脚本记录在 docs/benchmarks.md。
| 指标 | 数值 | 口径 |
|---|---|---|
| 并发摄取峰值 | 410,762 rows/s | 单机 relaxed 档、8 连接、20 万行批量插入——物联网多设备写入的真实形态 |
| 单连接摄取 | 226,074 rows/s | relaxed 档,超过 MariaDB 强持久档(162K);MariaDB 同档 262K(0.86×) |
| 引擎点查 | ~25 万 ops/s | xiadb-lsm;RocksDB 同机 ~11.6 万(约 2.2×) |
| 引擎异步批写 | ~2.0× | xiadb-lsm vs RocksDB(TiKV / CockroachDB 底层引擎) |
| 引擎全量扫描 | ~2.4× | xiadb-lsm vs RocksDB |
| 时间窗口查询 | ~26× 提速 | 分区裁剪 vs 全表扫描(12 万行跨 60 天,查单日) |
| TTL 淘汰 | O(1) | 整分区水位淘汰,成本与过期行数解耦;逐行删除路径需多花约 3 秒 |
| 降采样查询 | 5.47s / 16.5s | 按维度 GROUP BY 与多列时间桶降采样,实测反超 MariaDB(6.66s / 17.7s) |
| 单测 / 回归 | ctest 255/255 | 另有单机+分布式冒烟、Oracle 全链路、分布式故障注入脚本 |
| 二进制体积 | ~6 MB | Windows exe,全静态链接,免安装、零依赖 |
docs/benchmarks.md 可复测。