2024年最值得关注的AI时代SQL向量关系型数据库MyScaleDB开源项目深度评测与排行榜
概述
如果要用一句话来概括,MyScaleDB 是一个基于 ClickHouse 构建的 SQL 向量数据库,它最大的亮点在于:让开发者可以用自己熟悉的 SQL 去搭建可扩展的 AI 应用。这听起来是不是很耳熟?没错,它瞄准的正是 AI 应用和解决方案的优化场景,目标是高效管理和处理大规模数据。
简单来说,MyScaleDB 是一个高性能、可扩展且极具成本效益的 AI 数据库。它的设计初衷,就是为了给构建和扩展 AI 应用提供一个坚实的数据底座。它将向量搜索和存储能力整合到一个可扩展的关系型数据库中,既能高效存储和处理结构化数据,也能搞定非结构化数据。最终目的很明确——减少工程复杂性,同时确保 AI 应用的最佳性能表现。
特性
完全SQL兼容
- 快速、强大且高效的向量搜索、过滤搜索,以及 SQL 向量连接查询,这些都是开箱即用。
- 最关键的是,你不需要学习复杂的新工具或框架。把 SQL 和向量相关函数结合起来,就能直接与 MyScaleDB 交互。坚持用你熟悉和喜欢的方式,这本身就是一种生产力。
为AI应用程序做好生产准备
- 这是一个经过时间考验的统一平台,用于管理和处理结构化数据、文本、矢量、JSON、地理空间、时间序列数据等。
- 一个很实用的场景:通过将矢量与丰富的元数据相结合,并以任何规模执行高精度、高效率的过滤搜索,能够显著提高 RAG 的准确性。这意味着你可以告别那些数据碎片化带来的头疼问题。
无与伦比的性能和可扩展性
- MyScaleDB 利用了先进的 OLAP 数据库架构和先进的矢量算法,这让它在进行矢量运算时,速度快得像闪电一样。
- 随着数据不断增长,你可以轻松且经济高效地扩展应用,而不用担心性能瓶颈。
顺带提一句,与那些使用自定义 API 的专用向量数据库相比,MyScaleDB 不仅更强大、性能更好、成本更低,而且用起来更简单。再对比一下使用 pgvector 的 PostgreSQL 或使用向量扩展的 ElasticSearch 这类集成向量数据库,MyScaleDB 在处理结构化和向量连接查询(比如过滤搜索)时,消耗更少的资源,却能实现更高的准确性和速度。这背后,是它基于 ClickHouse 构建的选择。
为什么是 ClickHouse?这个开源的分析数据库,凭借列存储、高级压缩、跳过索引和 SIMD 处理等特性,在大数据处理和分析方面表现出色。尤其是过滤搜索——先通过其他属性过滤,再对剩余数据进行向量搜索——这种场景下,列存储和预过滤对确保高准确性和高性能至关重要。这恰恰是我们选择在 ClickHouse 之上构建 MyScaleDB 的原因。
为什么选择MyScaleDB
- 完全兼容 SQL
- 统一的结构化和矢量化数据管理
- 十亿级向量的毫秒级搜索
- 高度可靠和线性可扩展
- 混合搜索和复杂 SQL 向量查询
得益于 SQL 数据库在海量结构化数据场景下的长期积累,MyScaleDB 能够同时支持海量向量和结构化数据。包括字符串、JSON、空间、时序等多种数据类型的高效存储和查询。而且近期还将推出功能强大的倒排表和关键字检索功能,这会让 RAG 系统的精度进一步提升,甚至有可能替代 Elasticsearch 这样的系统。

整体架构
在 AI 大模型蓬勃发展的新时代,MyScale 团队的目标是提出新一代的“大模型 + 大数据”方案。以高性能的 SQL + 向量数据库作为坚实支撑,MyScaleDB 提供了大规模数据处理、知识查询、可观测性、数据分析和小样本学习等关键能力。它构建了一个 AI 和数据闭环,成为下一代“大模型 + 大数据”Agent 平台的关键基座。

快速启动
大家想快速上手的话,直接拉取 Docker 镜像就可以了。运行下面这条命令,就能启动一个 MyScaleDB 实例,默认用户是 default,没有密码:
docker run --name myscaledb myscale/myscaledb:1.4然后,使用 clickhouse-client 连接数据库:
docker exec -it myscaledb clickhouse-client教程
关于如何用向量索引创建 SQL 表并执行向量搜索的详细步骤,建议参考向量搜索文档。这里要特别提醒一句:在开源 MyScaleDB 中创建向量索引时,建议指定 TYPE SCANN。
创建带有向量列的表
-- 创建一个包含长度为384的body_vector的表
CREATE TABLE default.wiki_abstract
(
`id` UInt64,
`body` String,
`title` String,
`url` String,
`body_vector` Array(Float32),
CONSTRAINT check_length CHECK length(body_vector) = 384
)
ENGINE = MergeTree
ORDER BY id;将数据插入表
-- 从S3上的parquet文件插入数据
INSERT INTO default.wiki_abstract SELECT * FROM s3('https://myscale-datasets.s3.ap-southeast-1.amazonaws.com/wiki_abstract_with_vector.parquet','Parquet');创建矢量索引
-- 在body_vector上构建一个使用Cosine度量的SCANN向量索引
ALTER TABLE default.wiki_abstract ADD VECTOR INDEX vec_idx body_vector TYPE SCANN('metric_type=Cosine');
-- 从`vector_indices`表查询索引构建进度
-- 等进度变成`Built`就算完成了
SELECT * FROM system.vector_indices;执行矢量搜索
-- 进行向量搜索,返回前5条结果
SELECT
id,
title,
distance(body_vector, [-0.052, -0.0146, -0.0677, -0.0256, -0.0395, -0.0381, -0.025, 0.0911, -0.0429, -0.0592, 0.0017, -0.0358, -0.0464, -0.0189, -0.0192, 0.0544, -0.0022, -0.0292, -0.0474, -0.0286, 0.0746, -0.013, -0.0217, -0.0246, -0.0169, 0.0495, -0.0947, 0.0139, 0.0445, -0.0262, -0.0049, 0.0506, 0.004, 0.0276, 0.0063, -0.0643, 0.0059, -0.0229, -0.0315, 0.0549, 0.1427, 0.0079, 0.011, -0.0036, -0.0617, 0.0155, -0.0607, 0.0258, -0.0205, 0.0008, -0.0547, 0.0329, -0.0522, -0.0347, 0.0921, 0.0139, -0.013, 0.0716, -0.0165, 0.0257, -0.0071, 0.0084, -0.0653, 0.0091, 0.0544, -0.0192, -0.0169, -0.0017, -0.0304, 0.0427, -0.0389, 0.0921, -0.0622, -0.0196, 0.0025, 0.0214, 0.0259, -0.0493, -0.0211, -0.119, -0.0736, -0.1545, -0.0578, -0.0145, 0.0138, 0.0478, -0.0451, -0.0332, 0.0799, 0.0001, -0.0737, 0.0427, 0.0517, 0.0102, 0.0386, 0.0233, 0.0425, -0.0279, -0.0529, 0.0744, -0.0305, -0.026, 0.1229, -0.002, 0.0038, -0.0491, 0.0352, 0.0027, -0.056, -0.1044, 0.123, -0.0184, 0.1148, -0.0189, 0.0412, -0.0347, -0.0569, -0.0119, 0.0098, -0.0016, 0.0451, 0.0273, 0.0436, 0.0082, 0.0166, -0.0989, 0.0747, -0.0, 0.0306, -0.0717, -0.007, 0.0665, 0.0452, 0.0123, -0.0238, 0.0512, -0.0116, 0.0517, 0.0288, -0.0013, 0.0176, 0.0762, 0.1284, -0.031, 0.0891, -0.0286, 0.0132, 0.003, 0.0433, 0.0102, -0.0209, -0.0459, -0.0312, -0.0387, 0.0201, -0.027, 0.0243, 0.0713, 0.0359, -0.0674, -0.0747, -0.0147, 0.0489, -0.0092, -0.018, 0.0236, 0.0372, -0.0071, -0.0513, -0.0396, -0.0316, -0.0297, -0.0385, -0.062, 0.0465, 0.0539, -0.033, 0.0643, 0.061, 0.0062, 0.0245, 0.0868, 0.0523, -0.0253, 0.0157, 0.0266, 0.0124, 0.1382, -0.0107, 0.0835, -0.1057, -0.0188, -0.0786, 0.057, 0.0707, -0.0185, 0.0708, 0.0189, -0.0374, -0.0484, 0.0089, 0.0247, 0.0255, -0.0118, 0.0739, 0.0114, -0.0448, -0.016, -0.0836, 0.0107, 0.0067, -0.0535, -0.0186, -0.0042, 0.0582, -0.0731, -0.0593, 0.0299, 0.0004, -0.0299, 0.0128, -0.0549, 0.0493, 0.0, -0.0419, 0.0549, -0.0315, 0.1012, 0.0459, -0.0628, 0.0417, -0.0153, 0.0471, -0.0301, -0.0615, 0.0137, -0.0219, 0.0735, 0.083, 0.0114, -0.0326, -0.0272, 0.0642, -0.0203, 0.0557, -0.0579, 0.0883, 0.0719, 0.0007, 0.0598, -0.0431, -0.0189, -0.0593, -0.0334, 0.02, -0.0371, -0.0441, 0.0407, -0.0805, 0.0058, 0.1039, 0.0534, 0.0495, -0.0325, 0.0782, -0.0403, 0.0108, -0.0068, -0.0525, 0.0801, 0.0256, -0.0183, -0.0619, -0.0063, -0.0605, 0.0377, -0.0281, -0.0097, -0.0029, -0.106, 0.0465, -0.0033, -0.0308, 0.0357, 0.0156, -0.0406, -0.0308, 0.0013, 0.0458, 0.0231, 0.0207, -0.0828, -0.0573, 0.0298, -0.0381, 0.0935, -0.0498, -0.0979, -0.1452, 0.0835, -0.0973, -0.0172, 0.0003, 0.09, -0.0931, -0.0252, 0.008, -0.0441, -0.0938, -0.0021, 0.0885, 0.0088, 0.0034, -0.0049, 0.0217, 0.0584, -0.012, 0.059, 0.0146, -0.0, -0.0045, 0.0663, 0.0017, 0.0015, 0.0569, -0.0089, -0.0232, 0.0065, 0.0204, -0.0253, 0.1119, -0.036, 0.0125, 0.0531, 0.0584, -0.0101, -0.0593, -0.0577, -0.0656, -0.0396, 0.0525, -0.006, -0.0149, 0.003, -0.1009, -0.0281, 0.0311, -0.0088, 0.0441, -0.0056, 0.0715, 0.051, 0.0219, -0.0028, 0.0294, -0.0969, -0.0852, 0.0304, 0.0374, 0.1078, -0.0559, 0.0805, -0.0464, 0.0369, 0.0874, -0.0251, 0.0075, -0.0502, -0.0181, -0.1059, 0.0111, 0.0894, 0.0021, 0.0838, 0.0497, -0.0183, 0.0246, -0.004, -0.0828, 0.06, -0.1161, -0.0367, 0.0475, 0.0317]) AS distance
FROM default.wiki_abstract
ORDER BY distance ASC
LIMIT 5;技术栈
- ClickHouse:一个免费的大数据分析DBMS
- Faiss:Meta的Fundamental AI Research开发的,用于高效相似性搜索和密集向量聚类的库
- hnswlib:用于快速近似最近邻的仅头C++/Python库
- ScaNN:Google Research的Scalable Nearest Neighbors库