Qdrant向量数据库的介绍(二)
字数 1238,阅读大约需 7 分钟
索引
在索引方面,Qdrant使用分层可导航小世界(HNSW)算法,该算法对于标准向量搜索非常有效,但在过滤搜索操作方面效果不佳
部署
在线
免费的4GB存储空间,1GB内存,05vcpus
cloud.qdrant.io/accounts/[1]
单机
version: '3.3'
services:
qdrant:
image: qdrant/qdrant:latest
ports:
- "6333:6333"
- "6334:6334"
volumes:
- "./qdrant:/qdrant/storage"
environment:
- QDRANT__SERVICE__API_KEY=Pz&aAb@Ygx9%vfpvs^
restart: on-failure
hostname: kafka.local
networks:
- platform-common-net
networks:
platform-common-net:
external: true
API
api.qdrant.tech/api-referen…[2]
应用
Kilo code
先进行ollma配置向量化的embedding模型
在插件里配置相应信息
索引中:Indexing - Indexed 0 / 5777 blocks found
在Qdrant里创建了集合:ws-400d00ebdad6d633
对collection分析
{
"result": {
"status": "green",
"optimizer_status": "ok",
"indexed_vectors_count": 0,
"points_count": 0,
"segments_count": 8,
"config": {
"params": {
"vectors": {
"size": 1024,
"distance": "Cosine"
},
"shard_number": 1,
"replication_factor": 1,
"write_consistency_factor": 1,
"on_disk_payload": true
},
"hnsw_config": {
"m": 16,
"ef_construct": 100,
"full_scan_threshold": 10000,
"max_indexing_threads": 0,
"on_disk": false
},
"optimizer_config": {
"deleted_threshold": 0.2,
"vacuum_min_vector_number": 1000,
"default_segment_number": 0,
"max_segment_size": null,
"memmap_threshold": null,
"indexing_threshold": 20000,
"flush_interval_sec": 5,
"max_optimization_threads": null
},
"wal_config": {
"wal_capacity_mb": 32,
"wal_segments_ahead": 0
},
"quantization_config": null,
"strict_mode_config": {
"enabled": false
}
},
"payload_schema": {
"pathSegments.2": {
"data_type": "keyword",
"points": 0
},
"pathSegments.4": {
"data_type": "keyword",
"points": 0
},
"pathSegments.3": {
"data_type": "keyword",
"points": 0
},
"pathSegments.1": {
"data_type": "keyword",
"points": 0
},
"pathSegments.0": {
"data_type": "keyword",
"points": 0
}
}
},
"status": "ok",
"time": 0.001513041
}
# Qdrant 向量数据库参数配置详解
以下是 Qdrant 集合配置中所有参数的详细解释,按照功能模块分类:
1. 基本状态信息
status: "green"
集合健康状态,可能值有:
"green":正常运行
"yellow":部分功能受限
"red":严重问题
optimizer_status: "ok"
后台优化器状态,表示自动维护任务是否正常执行
indexed_vectors_count: 0
已构建HNSW索引的向量数量(当前为0表示没有向量被索引)
points_count: 0
集合中存储的总数据点数量(向量+payload)
segments_count: 8
数据分片(segment)数量,Qdrant内部将数据分成多个segment以提高并行性
2. 核心配置参数 (params)
vectors.size: 1024
每个向量的维度大小(这里是1024维向量)
vectors.distance: "Cosine"
向量相似度计算方法,可选:
"Cosine":余弦相似度(适合文本等场景)
"Euclid":欧氏距离
"Dot":点积相似度
shard_number: 1
数据分片数量(影响水平扩展能力,1表示单分片)
replication_factor: 1
数据副本数量(1表示没有副本)
write_consistency_factor: 1
写入操作需要确认的副本数(1表示主分片确认即可)
on_disk_payload: true
payload数据是否持久化到磁盘(true降低内存使用)
3. HNSW索引配置 (hnsw_config)
m: 16
HNSW图中每个节点的最大连接数(影响图连通性,值越大查询精度越高但内存占用越大)
ef_construct: 100
构建索引时的动态候选列表大小(值越大构建质量越高但构建时间越长)
full_scan_threshold: 10000
当集合中点数小于此值时,直接使用暴力搜索而非HNSW索引
max_indexing_threads: 0
最大索引构建线程数(0表示自动根据CPU核心数决定)
on_disk: false
索引是否存储在磁盘上(false表示在内存中,查询更快)
4. 优化器配置 (optimizer_config)
deleted_threshold: 0.2
segment中删除点占比超过20%时触发自动优化
vacuum_min_vector_number: 1000
执行vacuum操作(彻底删除标记数据)所需的最小向量数
default_segment_number: 0
自动优化的目标segment数量(0表示不限制)
max_segment_size: null
单个segment的最大大小(null表示无限制)
indexing_threshold: 20000
segment中向量数超过此值时触发索引构建
flush_interval_sec: 5
内存数据刷盘间隔(秒),影响数据持久性和写入性能
5. WAL配置 (wal_config)
wal_capacity_mb: 32
预写日志(WAL)的最大容量(MB),用于保证数据持久性
wal_segments_ahead: 0
预分配的额外WAL段数量(0表示不预分配)
6. 其他配置
quantization_config: null
量化配置(如设置标量量化可减少内存占用)
strict_mode_config.enabled: false
是否启用严格模式(true时会禁用某些可能导致性能下降的操作)
7. 有效载荷模式 (payload_schema)
定义了5个关键字类型的字段:
pathSegments.0到pathSegments.4
data_type: "keyword"(适合存储离散值)
points: 0(当前没有数据使用这些字段)
配置特点分析
内存优化型配置:
on_disk_payload=true 减少内存使用
HNSW索引保留在内存中(on_disk=false)保证查询速度
中小规模数据集优化:
full_scan_threshold=10000 适合数据量不大的场景
hnsw_config.m=16 平衡了精度和内存使用
写入配置:
flush_interval_sec=5 提供较好的写入吞吐
32MB WAL适合中等写入负载
这个配置适合存储约10万级别的1024维向量,特别适合需要快速查询但数据量不是特别大的应用场景。
这个配置适合存储约10万级别的1024维向量,特别适合需要快速查询但数据量不是特别大的应用场景。
对代码仓索引之后,内存和CPU出现用量变化,但是没有将向量化数据写入磁盘,很奇怪,因此我提了相应的问题到discord
引用链接
[1] cloud.qdrant.io/accounts/:
[2] api.qdrant.tech/api-referen…: