发现 
命令行工具开发者工具
AliSQL:带 DuckDB 与向量检索的 MySQL 分支
阿里云数据库团队维护的开源 MySQL 分支,内置 DuckDB 列式分析引擎与原生向量索引,兼容 MySQL 客户端协议。
- 浏览
- 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 整理,以原仓库为准。
更新记录
- vAliSQL-8.0.44-3当前版本
新增 binlog 实时复制(BRR),更新内嵌 DuckDB 源码至 v1.5.2-dev736,并修复两者集成中发现的问题,仍基于 MySQL 8.0.44。
评论