随着 AI 的火热发展,传统数据库或搜索引擎检索高维度信息时性能表现均不佳,伴随着这个问题向量数据库又焕发了第二春。

本文介绍的 Qdrant 是基于 Rust 所编写的一款向量数据库,在它的 benchmarks 我们可以看到对比起 Elasticsearch 具有明显的性能优势。

本文仅介绍 qdrant 相关概念,以及内部存储结构。涉及到 embedding 等相关概念请自行搜索

模型

Points

point 可以理解为关系型数据库中表记录中的一条,它由一个向量和一个可为空的 Payload 组成。伪代码如下:

enum PointIdType {
    U64(u64),
    UUID(uuid),
}

struct Point {
    id: PointIdType,
    vector: Vec<f32>,
    payload: Option<Payload>,
}  

Payload

Qdrant的一个重要特性之一是能够在向量中存储附加信息。 Qdrant允许存储任何可以使用JSON表示的信息。

Collections

Collections 可以理解为关系型数据库中的表,它的一行就是一个 point 。

缩略图

Figure 1: qdrant结构图

Figure 1: qdrant结构图


流程

Points upsert

Figure 2: 客户端插入Point流程图

Figure 2: 客户端插入Point流程图