Qdrant向量数据库的介绍(二)

288 阅读4分钟

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…: