向量数据库 (opens new window)和向量搜索 (opens new window)由于其出色的速度和可扩展性而迅速赢得了人们的青睐。与传统的机器学习模型不同,这些数据库利用高效的相似度度量,如欧几里得距离 (opens new window)、余弦相似度 (opens new window)等,以在不需要进行大量训练的情况下快速提供搜索结果。这种高效性以及与基于机器学习的替代方案相比的成本效益,使它们成为各种应用的理想解决方案。
鉴于向量数据库的蓬勃发展,选择适合您特定需求的数据库可能是一项具有挑战性的任务。吞吐量、成本和功能等因素在确定最佳选择方面起着至关重要的作用。
本文是我们系列文章的第三篇,深入比较了两个重要的竞争者:MyScaleDB (opens new window)和Qdrant (opens new window)。这两个数据库都提供了独特的优势,因此进行全面的分析对于明智的决策至关重要。
注意:如果您对向量数据库还不熟悉,我们建议从本系列文章的第一篇 (opens new window)开始,以建立对这一强大技术的基本理解。
# MyScaleDB和Qdrant简介
# MyScaleDB
MyScaleDB是一个针对AI应用和解决方案进行优化的云原生数据库。MyScaleDB基于强大的开源和高可扩展的ClickHouse数据库 (opens new window)构建,具有以下几个引人注目的优势:
- AI的统一平台:MyScaleDB通过在单个统一平台上无缝管理和处理结构化和向量化数据,简化了AI工作流程。这消除了复杂的数据流程,并简化了开发过程。
- 卓越的性能:MyScaleDB利用先进的OLAP数据库架构,为向量化数据的操作提供了出色的性能。这种架构实现了快速的查询执行,使其非常适合要求严格的AI工作负载。
- 基于SQL的简便性:MyScaleDB采用SQL的通用性,允许开发人员使用熟悉和广泛采用的语言与数据库进行交互。这消除了学习专门的查询语言的需求,加快了开发周期,提高了生产力。
- MSTG索引提升搜索性能:MyScaleDB利用多尺度树图算法(MSTG) (opens new window)算法,这是一种为高数据密度和优化搜索性能而设计的先进索引算法 (opens new window)。MSTG在基本的向量搜索和带过滤器的向量搜索 (opens new window)方面表现出色,确保快速准确地检索相关信息。
# Qdrant
Qdrant是另一个当代的向量数据库。它也是开源的,可以在Docker和云中使用。Qdrant的一些特点包括:
- 高级压缩:Qdrant使用二进制量化 (opens new window),将任何数值向量嵌入转换为布尔值向量。这提供了高达40倍的搜索性能提升。
- 多租户支持:将基于负载的分区划分为单个集合称为多租户 (opens new window)。Qdrant支持多用户共享实例的多租户功能。
- I/O Uring (opens new window):Qdrant支持
io_uring
以提高吞吐量,以应对操作系统系统调用的开销。
通过对MyScaleDB和Qdrant的功能进行了清晰的了解,现在让我们关注它们之间的主要区别。这些区别将帮助您确定哪个数据库最符合您的特定需求和优先事项,从性能到独特功能。
# 主机灵活性:向量数据库的关键考虑因素
在评估数据库解决方案时,主机成为一个关键因素,对性能、可扩展性和管理的便利性产生深远影响。正确的主机选项可以确保您的数据库能够优雅地处理波动的工作负载,保持高可用性,并最大程度地减少管理开销。
在主机方面,MyScaleDB和Qdrant都提供开源版本、基于云的解决方案和本地解决方案。云托管提供免费和付费的服务层,我们很快将详细介绍。
# 云托管
对于MyScaleDB云 (opens new window),您可以从一个支持500万个768维向量的免费Pod开始。在此处注册 (opens new window)并查看MyScaleDB快速入门 (opens new window)以获取更多说明。
Qdrant提供一个永久免费的1GB集群,无需预付费用。要开始使用Qdrant,请访问云端的快速入门 (opens new window)。
# 本地部署
对于本地部署的解决方案,Docker镜像是一个通用的选项。我们可以使用以下命令启动MyScaleDB Docker镜像:
docker run --name MyScaleDB --net=host MyScaleDB/MyScaleDB:1.6
然后使用ClickHouse客户端连接到数据库:
docker exec -it MyScaleDBdb clickhouse-client
类似地,我们也可以使用Docker在本地运行Qdrant:
docker run -p 6333:6333 qdrant/qdrant
# 核心功能
虽然主机选项为数据库的可访问性和可扩展性奠定了基础,但核心功能才是真正区分MyScaleDB和Qdrant的因素。本节将剖析每个平台的关键功能,提供对它们如何处理基于向量的数据处理复杂性的洞察,以帮助您了解哪个数据库最适合满足您的特定需求。
了解这些功能将帮助您了解每个数据库如何处理基于向量的数据处理中的关键任务,以及哪个数据库可能最适合满足您的特定需求。
# 查询语言和API支持
查询语言的选择和可用的API支持在开发人员的生产力和集成的便利性方面起着至关重要的作用。让我们看看MyScaleDB和Qdrant如何解决这些方面的问题:
# 多语言支持:
- Qdrant:Qdrant拥有广泛的多语言支持,为各种开发人员提供了适用于Python (opens new window)、Java (opens new window)、Go (opens new window)、.Net (opens new window)、Rust (opens new window)和TypeScript/JavaScript (opens new window)的SDK。这种广泛的语言支持确保与各种技术栈的无缝集成。
- MyScaleDB:MyScaleDB为Python、Java、Go和Node.JS (opens new window)提供SDK,为流行的编程语言提供了可靠的支持。
虽然这两个数据库都提供了可观的多语言支持,但MyScaleDB通过其独特的SQL支持使自己脱颖而出。您可以使用传统的SQL查询与MyScaleDB进行交互,它将与向量数据库或甚至传统和向量数据库的组合无缝配合工作,例如:
SELECT id, date, label,
distance(data, {target_row_data}) AS dist
FROM default.myscale_search
ORDER BY dist LIMIT 10
MyScaleDB中的distance
方法通过测量指定向量与存储在特定列中的所有向量之间的距离来计算向量之间的相似度。
注意:如果您喜欢使用SQL进行工作,那么无疑MyScaleDB将是您的选择。
# 支持的数据类型
处理各种数据类型对于任何数据库都是至关重要的,向量数据库也不例外。让我们比较一下MyScaleDB和Qdrant在支持的数据类型方面的差异:
# Qdrant的灵活JSON方法
Qdrant利用JSON负载的灵活性,可以存储和查询各种数据类型,包括:
- 关键字:用于基于文本的搜索和过滤。
- 整数和浮点数:用于数值数据和范围查询。
- 嵌套对象和数组:用于表示复杂的数据结构。
这种以JSON为中心的方法在数据建模方面提供了灵活性,并适应了各种用例。
# MyScaleDB的SQL驱动的多样性:
MyScaleDB通过充分利用其完整的SQL兼容性,将数据类型支持提升到了一个新的水平。这使其不仅可以管理向量数据,还可以处理各种传统数据类型,包括:
- 结构化数据:传统的关系型数据类型,如整数、浮点数、字符串、日期等。
- JSON:用于处理半结构化数据和嵌套对象。
- 地理空间数据:用于基于位置的查询和空间分析。
- 时间序列数据:用于存储和分析时间戳数据。
MyScaleDB在单个平台上处理向量数据和各种传统数据类型的能力提供了重要的优势。这种统一的方法简化了数据管理,消除了数据孤岛,并实现了跨不同数据类型的强大查询。
下面是一个示例表,显示了MyScaleDB可以管理的各种列的多样性,包括向量数据。
CREATE TABLE default.wiki_abstract_mini(
`id` UInt64,
`body` String,
`title` String,
`url` String,
`body_vector` Array(Float32),
CONSTRAINT check_length CHECK length(body_vector) = 768
)
ENGINE = MergeTree
ORDER BY id
SETTINGS index_granularity = 128;
此SQL命令创建了一个包含结构化和向量化数据的表,强制执行768
的向量大小,并通过按id
排序来优化查询。
TL;DR:这两个数据库都有效地支持各种数值和文本数据类型,但MyScaleDB通过其先进的SQL兼容性、强大的OLAP功能和对复杂数据结构(如地理空间和时间序列数据)的全面支持,将其推向了更高的水平。
# 索引
在索引方面,Qdrant使用分层可导航小世界(HNSW) (opens new window)算法,该算法对于标准向量搜索非常有效,但在过滤搜索操作方面效果不佳。
MyScaleDB通过引入多尺度树图(MSTG)算法来解决这个问题。MSTG将分层树聚类与基于图的搜索相结合,显著提高了检索速度和性能。这使得它在标准和复杂的过滤向量搜索操作中都非常高效。
顺便说一句,MyScaleDB和Qdrant都支持多向量搜索。
注意:MSTG在性能和过滤向量搜索方面优于现代索引算法,使MyScaleDB在标准和过滤向量搜索方面具有显著优势。
# 全文搜索
全文搜索 (opens new window)在Qdrant(从版本0.10.0开始)和MyScaleDB中都可用。Qdrant通过支持文本字段的分词和索引化来实现全文搜索,从而可以根据特定的单词或短语进行搜索和过滤。
另一方面,MyScaleDB使用Tantivy库,该库利用BM25算法进行准确高效的文档检索。
# Qdrant示例
以下是在Qdrant中创建全文索引(通常称为有效负载索引)的示例:
from qdrant_client import QdrantClient, models
client = QdrantClient(url="<http://localhost:6333>")
client.create_payload_index(
collection_name="{collection_name}",
field_name="name_of_the_field_to_index",
field_schema=models.TextIndexParams(
type="text",
tokenizer=models.TokenizerType.WORD,
min_token_len=2,
max_token_len=15,
lowercase=True,
),
)
这段Qdrant代码通过根据单词长度和大小写敏感性等参数对文本字段进行分词来设置文本索引。
# MyScaleDB示例
在MyScaleDB示例中,我们使用了带有英文停用词的stem
分词器,它可以通过关注单词的根形式来提高搜索准确性。在这种情况下,我们使用了表en_wiki_abstract
(如果您想详细了解,可以在此示例 (opens new window)中查看)。
ALTER TABLE default.en_wiki_abstract
ADD INDEX body_idx (body)
TYPE fts('{"body":{"tokenizer":{"type":"stem", "stop_word_filters":["english"]}}}');
注意:在全文搜索方面,两者没有太大区别,因为两者都提供了有效的解决方案。
# 过滤搜索
MyScaleDB通过其MSTG算法和位掩码技术优化了过滤向量搜索。这种组合加上ClickHouse的高级索引和并行处理能力,使MyScaleDB能够高效处理大型数据集。通过使用预过滤策略,MyScaleDB在主向量搜索之前缩小了数据集范围,确保只处理最相关的数据,从而显著提高性能和准确性。
Qdrant使用可过滤的HNSW算法 (opens new window),在搜索过程中应用过滤器,以确保只考虑搜索图中的相关节点。
# 地理搜索
MyScaleDB和Qdrant都支持地理搜索。MyScaleDB具有多个地理空间函数 (opens new window),用于支持地理搜索。例如,此函数可计算地球上两点之间的距离(将其视为流形):
greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)
# LLM API集成
可以说,向量搜索的最大应用是LLM和RAG。Qdrant和MyScaleDB都通过支持多个LLM API集成(如LlamaIndex (opens new window)、LangChain (opens new window)和Hugging Face (opens new window))来支持这一点。
# 定价
Qdrant和MyScaleDB都采用免费和付费的商业模式,提供适用于实验和较小项目的免费层,以及适用于要求严格的工作负载的更强大的付费层。重要的是,这两个平台都允许用户在不需要信用卡信息的情况下探索其免费服务。
# 免费层
- Qdrant:免费层提供1GB的存储容量。
- MyScaleDB:提供更为慷慨的免费层,允许存储高达500万个768维向量。以Qdrant平台的标准来衡量,要达到这种存储容量,大约需要每月支付约275美元的付费计划。
# 付费层
对于付费层,Qdrant和MyScaleDB都提供了三种类型的云托管:GCP、Azure和AWS。通常情况下,Azure和AWS的成本较高,而GCP是最经济实惠的选择。
对于付费层,我们将比较Qdrant的GCP托管和MyScaleDB。对于MyScaleDB,我们将考虑容量优化和性能优化两种选项,使用一致的768维向量大小进行比较。
容量 | Qdrant(美元/小时) | 节点 | MyScaleDB容量优化(美元/小时) | Pods | MyScaleDB性能优化(美元/小时) | Pods |
---|---|---|---|---|---|---|
1000万 | 0.75 | 1 | 0.09 | 1 | 0.33 | 2 |
--- | --- | --- | --- | --- | --- | --- |
2000万 | 1.5 | 1 | 0.19 | 2 | 0.67 | 4 |
4000万 | 3.02 | 2 | 0.38 | 4 | 1.33 | 8 |
8000万 | 4.52 | 3 | 0.76 | 8 | 2.67 | 16 |
1.6亿 | 9.05 | 6 | 1.51 | 16 | 5.33 | 32 |
3.2亿 | 16.58 | 11 | 3.02 | 32 | 10.66 | 64 |
在MyScaleDB的容量优化Pod中,我们可以获得每个Pod 1000万个向量的存储空间,而性能优化设置提供更低的延迟,因此我们在存储方面使用了更多的Pod。我们可以看到,即使是MyScaleDB的性能优化Pod,其成本也比Qdrant的最经济设置要便宜得多。
我们还注意到,MyScaleDB具有线性的扩展因子,而Qdrant具有更不对称的模式,如下图所示。
注意:在价格方面,无论是免费层还是付费层,MyScaleDB都无与伦比。
# 基准测试
虽然之前的功能比较提供了有价值的见解,但客观的基准测试提供了对MyScaleDB和Qdrant性能能力的更具体的理解。
# 吞吐量(每秒查询数)
吞吐量通常以每秒查询数(QPS)来衡量,直接反映了数据库处理并发请求的能力。基准测试结果清楚地显示了MyScaleDB相对于Qdrant的优越吞吐量。此外,随着并发线程数的增加,性能差距显著扩大,展示了MyScaleDB在重负载下出色的可扩展性。
# 平均查询延迟
平均查询延迟以毫秒或秒为单位,表示数据库处理查询并返回结果的平均时间。较低的延迟意味着更快的响应时间,这对于实时应用程序和用户体验至关重要。
基准测试结果一致地显示MyScaleDB相对于Qdrant实现了显著较低的平均查询延迟。这一趋势在不同线程数下保持一致,表明MyScaleDB能够在高并发情况下保持低延迟。
我们在**P95(95百分位数)**延迟方面也看到了类似的趋势,进一步强调了MyScaleDB在实际应用中的低延迟。
# 构建时间
MyScaleDB(绿色;在右下角的那个小点)不仅具有更好的精度,而且速度几乎快5倍。
# 月度成本
成本效益在选择正确的数据库解决方案时起着至关重要的作用。正如定价部分所强调的那样,MyScaleDB通常提供了比Qdrant更具吸引力的选择,特别是在考虑到其慷慨的免费层的情况下。
这张图以搜索线程为基础进一步解释了这一点。我们可以看到,随着搜索线程数的增加,Qdrant的成本(灰色)呈现出急剧上升的趋势。相比之下,MyScaleDB保持了明显较低的成本曲线,即使在更高的线程数下也保持相对稳定。
# 结论
Qdrant和MyScaleDB都是向量数据库领域中重要的竞争者。Qdrant由于其更长时间的市场存在,受到了更广泛的采用,并提供了支持稀疏向量和高效量化技术等引人注目的功能。
然而,MyScaleDB作为一个强大的替代方案,具有以下重要优势:
- 性能和可扩展性:MyScaleDB在基准测试中始终优于Qdrant,展示出更高的吞吐量、更低的延迟和令人印象深刻的可扩展性,适用于要求严格的工作负载。
- 成本效益:MyScaleDB通过其慷慨的免费层和较低的付费计划成本提供了一个引人注目的价值主张,特别是对于高并发场景。
- 统一数据管理:MyScaleDB在单个平台上处理向量数据和各种传统数据类型的能力简化了数据流程,消除了数据孤岛,并实现了跨不同数据类型的强大查询。
- 基于SQL的简便性:MyScaleDB利用SQL的熟悉性和表达能力,简化了开发流程,并使用户能够使用广泛采用的语言与向量数据进行交互。
最终,最佳选择取决于您的具体需求和优先事项。如果广泛的语言支持和稀疏向量处理等专门功能至关重要,那么Qdrant可能是一个合适的选择。然而,如果性能、可扩展性、成本效益和统一数据管理是关键考虑因素,那么MyScaleDB无疑是明显的首选。
我们鼓励您仔细评估自己的需求,并利用本文比较的见解,做出符合您独特的数据处理和应用需求的明智决策。