跳到正文
发现
AliSQL:带 DuckDB 与向量检索的 MySQL 分支
命令行工具开发者工具

AliSQL:带 DuckDB 与向量检索的 MySQL 分支

阿里云数据库团队维护的开源 MySQL 分支,内置 DuckDB 列式分析引擎与原生向量索引,兼容 MySQL 客户端协议。

admin
发布于 2026-10-28
浏览
4
访问
0
下载
0
版本
vAliSQL-8.0.44-3
平台
Linux
该作品还没有经过官方审核。访问演示、下载或复制命令前,请自行确认来源可信。

详细介绍

项目简介

AliSQL 是由阿里云数据库团队维护的开源 MySQL 分支,当前版本基于 MySQL 8.0.44,自 2016 年 8 月起开源并持续维护。它在保留 MySQL 客户端协议的前提下,增加了 DuckDB 分析型存储引擎、HNSW 向量索引、Native Flashback、binlog 实时复制(BRR)以及多项 binlog 优化。

使用 MySQL 协议连接的应用程序可以继续使用现有的 MySQL 客户端和驱动。

主要功能

  • DuckDB 存储引擎:为分析型表提供列式执行与列式存储,并支持自动压缩。README 中给出的 TPC-H SF100 测试结果显示,在该测试环境下部分查询相比 InnoDB 有 200 倍以上的加速。
  • 向量索引(VIDX):VECTOR(N) 类型配合 HNSW 索引,支持最多 16,383 维的向量,提供原生向量存储与 ANN 近似检索,支持 COSINE 与 EUCLIDEAN 距离。
  • Native Flashback:通过 AS OF TIMESTAMP 与保留的 undo 快照查询 InnoDB 的历史数据。
  • 大事务优化:Binlog Cache Free Flush 降低大事务提交时的 I/O 放大(仅针对符合条件的 InnoDB 事务,DuckDB 模式未开启时生效)。
  • Binlog 持久化:Persist Binlog Into Redo V2 在保留崩溃恢复能力的同时减少同步 binlog I/O。
  • Binlog 实时复制(BRR):可在提交前传输符合条件的大事务,并可选地在备库上提前应用受支持的 DDL 与事务(需主动开启)。
  • 规划中的特性:Instant DDL、并行 B+tree 构建、非阻塞锁以及崩溃恢复加速(RTO 优化)。

安装与使用

方式一:从源码构建

# 克隆仓库
git clone https://github.com/alibaba/AliSQL.git
cd AliSQL

# 构建(release 模式)
sh build.sh -t release -d ~/alisql

# 安装
make install

构建选项:

选项 说明 默认值
-t release|debug 构建类型 debug
-d <dir> 安装目录 可写时为 /usr/local/alisql,否则为 $HOME/alisql
-g asan|tsan 启用 sanitizer(内存/线程) 关闭
-c 启用代码覆盖率(gcov) 关闭

构建前置要求:CMake 3.x+、Python 3、GCC 7+ 或 Clang 5+。

方式二:使用预编译包或 Docker 镜像

最新版本为 Linux x86_64 与 aarch64(glibc 2.17)提供了预编译二进制包,并提供 Docker 镜像:

docker pull songhuaxiong/alisql:8.0.44-3

初始化并启动服务

# 初始化数据目录
~/alisql/bin/mysqld --initialize-insecure --datadir=~/alisql/data

# 启动服务,并为下文示例开启 DuckDB
~/alisql/bin/mysqld --datadir=~/alisql/data --duckdb_mode=ON

DuckDB 分析示例

-- 创建使用 DuckDB 引擎的分析表
CREATE TABLE sales_analytics (
    sale_date DATE,
    product_id INT,
    revenue DECIMAL(10,2),
    quantity INT
) ENGINE=DuckDB;

-- 通过 DuckDB 执行分析聚合
SELECT
    DATE_FORMAT(sale_date, '%Y-%m') as month,
    SUM(revenue) as total_revenue,
    COUNT(*) as transactions
FROM sales_analytics
GROUP BY month
ORDER BY total_revenue DESC;

向量检索示例

-- 向量特性默认关闭,且向量索引需要 RC 隔离级别
SET GLOBAL vidx_disabled = OFF;
SET SESSION transaction_isolation = 'READ-COMMITTED';

CREATE TABLE embeddings (
    id INT PRIMARY KEY,
    content TEXT,
    embedding VECTOR(3)
) ENGINE=InnoDB;

INSERT INTO embeddings VALUES
    (1, 'first document', VEC_FROMTEXT('[0.1,0.2,0.3]')),
    (2, 'second document', VEC_FROMTEXT('[0.2,0.1,0.4]'));

-- 创建 HNSW 索引以加速 ANN 检索
CREATE VECTOR INDEX idx_embedding ON embeddings(embedding) DISTANCE=COSINE;

SELECT id, content,
       VEC_DISTANCE_COSINE(
           embedding, VEC_FROMTEXT('[0.1,0.2,0.3]')
       ) AS distance
FROM embeddings
ORDER BY distance
LIMIT 10;

注意事项

  • 向量特性默认关闭,需要先设置 vidx_disabled = OFF;创建向量索引要求会话隔离级别为 READ-COMMITTED。
  • Free Flush 只针对符合条件的 InnoDB 事务,并且仅在 DuckDB 模式未启用时生效;开启 DuckDB 模式后提交走专用的 DuckDB 路径。BRR 会复用 Free Flush 的缓存文件,但这本身并不意味着走 Free Flush 提交。
  • BRR 属于需要主动开启(opt-in)的特性,其传输、提前应用、配置、监控与限制请参阅对应文档。
  • 阿里云 RDS MySQL 提供部分 AliSQL 特性的托管版本,其支持的版本与参数默认值可能与本仓库不同,操作 RDS 实例时请以产品文档为准。
  • 官方文档包括 DuckDB 集成指南、向量索引指南、Native Flashback 指南、Binlog in Redo 指南、Binlog Cache Free Flush 指南与 Binlog 实时复制指南,均位于仓库 wiki 目录。

本作品整理自 GitHub 开源项目 alibaba/AliSQL,原作者 @alibaba。中文介绍由 AI 根据项目 README 整理,以原仓库为准。

更新记录

  1. vAliSQL-8.0.44-3当前版本

    新增 binlog 实时复制(BRR),更新内嵌 DuckDB 源码至 v1.5.2-dev736,并修复两者集成中发现的问题,仍基于 MySQL 8.0.44。

评论