参数对比

XiaDB vs 主流数据库(13 维)

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,可选 TLSMySQL 协议MySQL 协议专有 TNS / OCI(ojdbc)MySQL 协议
SQL 方言双方言:MySQL + Oracle(同引擎切换)MySQLMySQL + Oracle 兼容模式Oracle SQLMySQL 为主
事务 / 隔离MVCC 快照隔离,提交时冲突检测(乐观)MVCC + 悲观行锁,默认 RR同 MySQLMVCC,默认 RC,行锁等待MVCC + Percolator,悲观 / SI 可选
存储过程 / PL-SQLMySQL 存储过程 + 自研 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 / OEMinformation_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 架构

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

每个 region 一个 Raft 组

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

MVCC 多版本快照隔离

MVCC 多版本快照隔离:读取指定快照时间戳的版本,读写不互相阻塞

核心优势

六大优势的实现依据

全部性能数据均为同机 A/B 实测,注明环境与负载,短板照实公开——这是本项目坚持的"诚实基准"文化。

全自研,零依赖

存储引擎、SQL 解析执行、MySQL 协议、RPC、序列化、Raft 共识、国密算法、Web 控制台——全部从零自研,约 3.6 万行 C++。二进制仅链接 libc/libstdc++。

  • 没有供应链黑盒,关键代码可审计
  • 目标许可证 Apache-2.0,全库无 GPL 代码
  • Windows 版全静态约 6 MB 单文件,免安装
$ ldd xiadb-sql
  linux-vdso.so.1
  libstdc++.so.6
  libc.so.6
  // 仅系统运行时,无第三方

一个 exe,两种方言

同一引擎同时提供 MySQL 与 Oracle 方言,参数或会话级切换。以 MySQL 生态承接存量 Oracle 应用:换驱动,SQL 尽量不改。

  • MySQL 方言:现有客户端 / 驱动 / ORM / 图形工具直连
  • Oracle 方言:完整自研 PL/SQL 引擎(过程/函数/包/游标/异常)
  • --sql_dialect=oracle 一个参数切换全链路
连接协议MySQL 8.0.35
Oracle 精度NUMBER(38)
数据字典视图48 项
方言切换SET sql_dialect

写入达 MySQL 级,引擎领先 RocksDB

同机同负载 A/B 实测:存储引擎 xiadb-lsm 相对 RocksDB(TiKV/CockroachDB 底层引擎)异步批写约 2.0×、随机点查约 2.2×、全量扫描约 2.4× 领先。

  • 多连接并发摄取峰值 410K rows/s(8 连接)
  • 单连接 relaxed 档 226K rows/s,超 MariaDB 强持久档
  • 诚实短板:纯聚合全表扫描仍慢约 1.3×(列存在路线图)
并发摄取峰值410,762 rows/s
单连接摄取226,074 rows/s
引擎点查~25 万 ops/s
vs RocksDB 点查~2.2×

安全与合规内建

多用户口令认证与权限管理,透明静态数据加密(TDE,密钥不落盘),自研国密算法 SQL 函数(经官方测试向量验证),可选 TLS 1.2+ 加密链路。

  • SM4 透明加密(TDE)
  • 国密 SM2 / SM3 / SM4 SQL 函数
  • 可选 TLS 1.2+ 加密传输
静态加密SM4 TDE
国密函数SM2 / SM3 / SM4
传输加密TLS 1.2+(可选)
认证口令 + 全局权限位
Oracle 兼容

Oracle 兼容矩阵与已知差异

定位是"换驱动、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
SQLORDER SIBLINGS BY 按普通 ORDER BY 处理树形展示顺序可能与 Oracle 不同
schema单命名空间:schema 前缀接受但指向同一对象a.tb.t 是同一张表;依赖多 schema 隔离的部署需拆库
对象GTT 无会话数据隔离ON COMMIT DELETE ROWS 在事务结束清空,但多个并发会话看得到彼此的行
对象物化视图仅全量刷新REFRESH FAST/ON COMMIT 选项接受但按 COMPLETE 全量重建执行
类型NUMBER 上限 38 位;无独立 INTERVAL / TIMESTAMP WITH TIME ZONETIMESTAMP 按 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/srelaxed 档,超过 MariaDB 强持久档(162K);MariaDB 同档 262K(0.86×)
引擎点查~25 万 ops/sxiadb-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 MBWindows exe,全静态链接,免安装、零依赖
诚实说明:以上为 WSL2 受控基准,环境噪声下与 MariaDB "互有胜负、达到 MySQL 级",我们不宣称全面超越。当前诚实短板:纯聚合全表扫描仍慢约 1.3 倍(列存与向量化在路线图上);强持久档单连接写入仍落后(组提交摊销在慢 fsync 硬件上的收益待裸机验证)。所有性能数据保留对自己不利的结论,完整记录于 docs/benchmarks.md 可复测。