目 录CONTENT

文章目录

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

Administrator
2025-06-22 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

字数 1238,阅读大约需 7 分钟

索引

在索引方面,Qdrant使用分层可导航小世界(HNSW)算法,该算法对于标准向量搜索非常有效,但在过滤搜索操作方面效果不佳

部署

在线

免费的4GB存储空间,1GB内存,05vcpus
https://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

https://api.qdrant.tech/api-reference[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(当前没有数据使用这些字段)

## 配置特点分析

1. **内存优化型配置**:
   - `on_disk_payload`=true 减少内存使用
   - HNSW索引保留在内存中(`on_disk`=false)保证查询速度

2. **中小规模数据集优化**:
   - `full_scan_threshold`=10000 适合数据量不大的场景
   - `hnsw_config.m`=16 平衡了精度和内存使用

3. **写入配置**:
   - `flush_interval_sec`=5 提供较好的写入吞吐
   - 32MB WAL适合中等写入负载

这个配置适合存储约10万级别的1024维向量,特别适合需要快速查询但数据量不是特别大的应用场景。

对代码仓索引之后,内存和CPU出现用量变化,但是没有将向量化数据写入磁盘,很奇怪,因此我提了相应的问题到discord

引用链接

​[1]​ https://cloud.qdrant.io/accounts/:
​[2]​ https://api.qdrant.tech/api-reference:

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区