🟡 SQL 是什么?
SQL 的设计初衷是为了处理结构化数据,它的全称就是SQL(Structured Query Language,结构化查询语言)是专门用于操作关系型数据库的语言。非关系型数据库(NoSQL 数据库)并不依赖 SQL 语言,而是通过键直接访问对应的值。向量数据库也不使用 SQL,而是专注于高维向量的存储和检索。其查询方式基于相似度计算,而不是字段匹配。空间数据库(Spatial Database)其实可以被视为关系型数据库的一种扩展,它在传统的关系型数据库基础上增加了对空间数据的支持,空间数据库引入了新的字段类型,用于表示空间数据,所以它仍然使用 SQL,但对其进行了扩展,增加了专门的空间查询功能。例如空间关系查询,空间索引等原始SQL没有的函数。
🟡 数据库类型
关系型数据库(PostgreSQL) | 非关系型数据库(Redis) | 向量数据库(inecone、Milvus) | |
---|---|---|---|
数据存储形式 | 表格 | 键值对、文档、图等等 | 高维向量(Embeddings)。 |
查询方式 | 基于字段匹配—SQL语法 | 基于键或索引的查找。 | 基于相似度的搜索 |
适用场景 | 结构化数据管理(如用户信息、订单记录)。 | 半结构化或非结构化数据存储(如日志、JSON 文档)。 | 语义搜索、推荐系统、图像检索等高维数据任务。 |
扩展性 | 扩展性较差(需要分片或分区)。 | 扩展性强(分布式架构支持大规模数据)。 | 针对高维向量优化,支持高效相似度搜索。 |
性能瓶颈 | 复杂查询可能导致性能下降。 | 数据量过大时可能影响写入或读取性能。 | 向量维度越高,计算相似度的开销越大。 |
🟡 对比数据存储与查询
(1) 关系型数据库
假设我们有一个用户表:查询:SELECT * FROM users WHERE City = 'New York';
ID | Name | Age | City |
---|---|---|---|
1 | Alice | 30 | New York |
2 | Bob | 25 | San Francisco |
3 | Charlie | 35 | Los Angeles |
(2) 非关系型数据库
使用 MongoDB 存储用户信息:查询:db.users.find({ city: "New York" });
{
"id": 1,
"name": "Alice",
"age": 30,
"city": "New York"
}
(3) 向量数据库 存储用户的兴趣爱好嵌入向量(例如每个用户用一个 128 维的向量表示):
ID | Vector (128 维) |
---|---|
1 | [0.1, -0.2, 0.5, ..., 0.8] |
2 | [-0.3, 0.4, -0.1, ..., 0.6] |
3 | [0.7, 0.9, -0.2, ..., -0.4] |
查询:Find similar vectors to [0.1, -0.2, 0.5, ..., 0.8] using cosine similarity.
🟡 为什么大模型兴起后需要向量数据库?
(1) Token 的限制 :LLM通常有固定的上下文窗口(如 4096 或 8192 个 token)。这意味着模型无法一次性处理超长文档或海量数据。使用嵌入模型(如 text-embedding-ada-002
)将文本转换为固定长度的向量表示。将这些向量存储到向量数据库中,以便快速检索相关数据。
(2) 语义搜索的需求:传统数据库的局限性在于本质靠基于关键字匹配或字段过滤,所有关系都需要人为定义,无法自动捕捉数据之间的隐含关系。在一个包含动物信息的数据库中,您需要手动为“猫”和“狗”添加标签(如“哺乳动物”),否则它们之间的相似性无法被发现,当数据规模增大时,人为定义的关系会变得难以维护,而且在面对非结构化数据(如文本、图像)时。向量数据库可以捕捉语义信息,支持基于相似度的搜索。因此,传统数据库更适合处理显式关系,而无法捕捉数据之间的隐含语义。向量数据库的核心思想是通过算法将数据映射到高维空间,并利用向量之间的距离或相似度来捕捉数据之间的隐含关系。使用深度学习模型(如 Word2Vec、BERT、CLIP 等)将原始数据(如文本、图像、音频)转换为固定长度的向量表示。例如,“猫”和“狗”可能被分别表示为 [0.1, -0.2, 0.5]
和 [0.2, -0.3, 0.4]
。这些向量表示捕捉了数据的语义信息。例如,语义相似的内容在向量空间中彼此靠近。这种相似性是通过算法自动捕捉的,无需人为定义规则或关系。相似度是向量数据库的核心驱动力。向量数据库通过嵌入模型和相似度计算,自动捕捉数据之间的隐含关系,无需人为定义规则或标签。即使面对未见过的数据,嵌入模型也能生成合理的向量表示。例如,新出现的词汇或图片可以直接嵌入到向量空间中。无论是文本、图像还是音频,都可以通过嵌入模型转换为统一的向量表示。这使得向量数据库能够处理多种类型的数据。并且还有一个能力叫动态适应性,比如嵌入模型可以根据上下文生成不同的向量表示。例如,“苹果”在“水果”上下文中和“科技公司”上下文中会有不同的向量。而且还能实时更新,向量数据库支持动态插入和更新向量,适应快速变化的数据环境。
(3) 实时性和效率:调用大模型进行推理的成本较高(如 API 调用费用、延迟等)。在调用大模型之前,先从向量数据库中检索最相关的数据。例如,在问答系统中,先从向量数据库中找到与问题最相关的文档片段,然后将这些片段作为上下文传递给大模型。