向量数据库对比以及Chroma操作
一、向量数据库与传统类型数据库
向量数据库(Vector Storage Engine)与传统类型的数据库如关系型数据库(MySQL)、文档型数据库(MongoDB)、键值存储(Redis)、全文搜索引擎(Elasticsearch,简称ES)等在设计理念、应用场景和技术实现上存在显著差异。以下是它们之间的对比:
1.1. 向量数据库
- 设计理念:专门设计用于存储和查询高维向量数据,支持基于相似度的搜索,例如通过余弦相似度、欧氏距离等方式来查找最接近的向量。
- 应用场景:主要用于机器学习模型输出的向量表示的高效检索,如图像识别、推荐系统、自然语言处理中的文本相似性搜索等。
- 技术特性:
- 支持高效的近似最近邻(Approximate Nearest Neighbor, ANN)搜索。
- 可以处理非常大规模的数据集,且对维度不敏感。
- 提供了针对向量数据优化的索引结构。
1.2. 关系型数据库(MySQL)
- 设计理念:基于表格形式组织数据,强调数据的一致性和事务处理能力。
- 应用场景:适用于需要复杂查询、严格事务控制的应用场景,如金融交易系统、企业资源规划(ERP)等。
- 技术特性:
- 支持SQL查询语言,便于进行复杂的联表查询和聚合操作。
- 强调ACID属性(原子性、一致性、隔离性、持久性),适合于对数据一致性和完整性要求较高的场合。
1.3. 文档型数据库(MongoDB)
- 设计理念:采用文档作为基本单位存储数据,文档可以嵌套,非常适合存储半结构化或非结构化数据。
- 应用场景:适用于内容管理系统、物联网(IoT)数据存储、实时分析等场景。
- 技术特性:
- 使用JSON-like格式存储数据,易于扩展字段。
- 提供了灵活的数据模型,支持水平扩展。
1.4. 键值存储(Redis)
- 设计理念:简单的键值对存储机制,强调高性能读写操作。
- 应用场景:缓存、会话管理、实时分析等需要快速访问的小型数据集。
- 技术特性:
- 内存中操作,提供了极高的读写速度。
- 支持多种数据结构,如字符串、哈希表、列表、集合等。
1.5. 全文搜索引擎(Elasticsearch)
- 设计理念:专注于全文搜索,能够快速检索大量文本数据并提供相关性排序。
- 应用场景:日志分析、网站搜索、商业智能等领域。
- 技术特性:
- 支持复杂的查询语法,包括模糊查询、短语匹配等。
- 提供强大的分词和倒排索引功能,支持多语言文本搜索。
二、向量数据库 vs. 其他类型数据库对比
2.1. 数据模型与核心功能
| 数据库类型 | 数据模型 | 核心功能 | 典型场景 |
|---|---|---|---|
| 向量数据库 | 高维向量(如512维浮点数组) | 相似性搜索(余弦、欧氏距离等) | 图像/文本检索、推荐系统、AI模型嵌入 |
| 关系型数据库(MySQL) | 结构化表格(行与列) | SQL查询、ACID事务、复杂关联查询 | 金融交易、ERP系统、结构化数据管理 |
| 文档数据库(MongoDB) | JSON/BSON文档(半结构化) | 灵活查询、嵌套文档存储 | 日志存储、用户配置、内容管理系统 |
| 键值数据库(Redis) | 键-值对(简单数据结构) | 高速缓存、原子操作 | 会话缓存、排行榜、实时计数器 |
| 搜索引擎(Elasticsearch) | 文本+倒排索引 | 全文检索、模糊匹配、聚合分析 | 日志分析、电商搜索、文本内容检索 |
2.2. 查询方式对比
| 数据库类型 | 查询特点 |
|---|---|
| 向量数据库 | 基于向量距离的近似最近邻(ANN)搜索,支持相似性排序(如 Top-K 结果) |
| 关系型数据库 | 基于SQL的精确查询,支持JOIN、GROUP BY等复杂操作,强调数据一致性 |
| 文档数据库 | 基于文档字段的灵活查询(如嵌套查询、范围过滤),支持部分索引 |
| 键值数据库 | 基于键的精确读写,支持简单范围查询(如 SCAN),但无复杂关联操作 |
| 搜索引擎 | 基于关键词的全文检索,支持模糊匹配、分词、相关性评分(TF-IDF/BM25) |
2.3. 性能与优化方向
| 数据库类型 | 性能优化重点 | 瓶颈 |
|---|---|---|
| 向量数据库 | 高维向量索引(如HNSW、IVF-PQ)加速相似性搜索 | 高维数据计算复杂度高,内存占用大 |
| 关系型数据库 | 事务处理、索引优化(B+树)、锁机制 | 复杂JOIN和大表查询的延迟 |
| 文档数据库 | 文档结构灵活性、分片扩展性 | 嵌套层级过深时的查询效率下降 |
| 键值数据库 | 低延迟读写、内存优化 | 数据持久化与内存成本的平衡 |
| 搜索引擎 | 倒排索引压缩、分词效率、分布式查询 | 高基数字段的聚合性能(如去重统计) |
2.4. 适用场景示例
| 场景 | 推荐数据库 | 原因 |
|---|---|---|
| 人脸识别1:N检索 | 向量数据库(如Milvus、Pinecone) | 需快速比对海量高维向量,支持ANN索引和GPU加速 |
| 电商订单管理 | 关系型数据库(MySQL) | 需要事务支持、订单状态一致性及复杂关联查询 |
| 用户行为日志存储 | 文档数据库(MongoDB) | 半结构化日志格式灵活,支持动态字段扩展 |
| 实时在线游戏排行榜 | 键值数据库(Redis) | 低延迟读写,支持有序集合(ZSET)实现实时排名 |
| 新闻内容全文检索 | 搜索引擎(Elasticsearch) | 支持分词、相关性排序、高亮显示等文本特性 |
2.5. 核心差异总结
| 维度 | 向量数据库 | 其他数据库 |
|---|---|---|
| 数据本质 | 非结构化高维向量(AI生成) | 结构化或半结构化数据(文本、数值、文档等) |
| 查询目标 | 相似性匹配(模糊结果) | 精确匹配或范围查询 |
| 索引技术 | ANN索引(如HNSW、Faiss) | B+树、倒排索引、哈希索引等 |
| 硬件依赖 | 依赖GPU/高性能计算加速向量运算 | 通常依赖CPU和内存优化 |
| 扩展性 | 分布式向量索引,横向扩展集群 | 分库分表(关系型)或分片(NoSQL) |
三、选择参考
- 若需处理高维向量相似性搜索(如AI模型输出),优先选择向量数据库。
- 若需强一致性事务或复杂关联查询,关系型数据库更合适。
- 半结构化数据(如日志、JSON文档)适合MongoDB,而全文检索场景应选Elasticsearch。
- 混合架构:实际系统中常组合使用(如用Redis缓存热点数据,ES处理搜索,向量库支持AI功能)。
四、向量数据库对比
以下是几款知名向量数据库的对比分析,从是否收费、是否开源、适用场景及出品方等维度:
4.1. Milvus
- 出品方:Zilliz(中国上海企业)
- 开源情况:开源(Apache 2.0协议)
- 收费模式:社区版免费;企业版收费
- 适用场景:
- 企业级应用:支持分布式部署、多租户隔离,适用于大规模数据管理(如百亿级向量)。
- 多模态检索:结合文本、图像、视频的混合检索,适合推荐系统、大模型知识库构建。
- 高可用性需求:提供云原生支持(如Kubernetes),适合金融、医疗等敏感行业。
- 特点:集成GPU加速,支持动态数据更新,与国产大模型生态深度兼容。
4.2. Pinecone
- 出品方:Pinecone Systems(美国)
- 开源情况:闭源(全托管商业服务)
- 收费模式:按需付费(免费试用后收费,价格较高)
- 适用场景:
- 快速部署:无需自建基础设施,适合初创企业或对运维要求低的场景。
- 实时搜索:支持实时索引更新,适用于动态数据环境(如电商实时推荐)。
- 企业级SLA:提供高可用性和数据持久化保障。
- 特点:API简单易用,支持自动索引优化,但成本较高。
4.3. Chroma
- 出品方:开源社区(主语言Rust,支持Python/JS)
- 开源情况:开源(Apache 2.0协议)
- 收费模式:免费(可自托管或使用托管服务,如AWS托管约15美元/月)
- 适用场景:
- 轻量级开发:适合个人开发者或小团队快速构建AI应用(如语义搜索、RAG)。
- 多媒体处理:支持音频、视频的向量化检索,适合内容推荐系统。
- Jupyter集成:在Notebook中快速验证原型。
- 特点:安装便捷(
pip install即可),文档友好,但扩展性较弱。
4.4. Faiss
- 出品方:Meta(Facebook AI Research)
- 开源情况:开源(MIT协议)
- 收费模式:免费
- 适用场景:
- 高性能搜索:支持十亿级向量检索,适合图像/视频搜索(如Instagram内容推荐)。
- GPU加速:利用多GPU并行计算提升效率。
- 算法研究:提供多种索引类型(如IVF、PQ),供开发者灵活调优。
- 特点:计算效率高,但需自行处理分布式部署和数据管理。
4.5. Weaviate
- 出品方:SeMI Technologies(荷兰)
- 开源情况:开源(BSD协议)
- 收费模式:社区版免费;企业版需付费
- 适用场景:
- 语义搜索:集成知识图谱,适合复杂语义理解(如法律文档分析)。
- 多模态数据整合:支持文本、图像、音频的联合检索。
- 实时更新:动态索引支持数据实时写入与查询。
- 特点:模块化架构,支持自定义机器学习模型嵌入。
4.6. Qdrant
- 出品方:开源社区(俄罗斯团队主导)
- 开源情况:开源(Apache 2.0协议)
- 收费模式:免费(托管服务收费)
- 适用场景:
- 高精度检索:支持混合搜索(向量+元数据过滤),适合电商精准推荐。
- 分布式部署:适合中大规模企业应用。
- 特点:性能与Milvus接近,但社区生态较小。
4.7. 对比总结表
| 数据库 | 开源 | 收费模式 | 适用场景 | 出品方 | 核心优势 |
|---|---|---|---|---|---|
| Milvus | 是 | 社区免费/企业付费 | 企业级大规模检索、多模态应用 | Zilliz(中国) | 分布式扩展、国产化支持 |
| Pinecone | 否 | SaaS按需付费 | 快速部署、实时搜索 | Pinecone(美国) | 全托管、易用性高 |
| Chroma | 是 | 免费/托管收费 | 轻量级开发、多媒体检索 | 开源社区 | 安装便捷、适合原型验证 |
| Faiss | 是 | 免费 | 高性能计算、算法研究 | Meta | GPU加速、高计算效率 |
| Weaviate | 是 | 社区免费/企业付费 | 语义搜索、知识图谱集成 | SeMI Technologies | 模块化、多模态支持 |
| Qdrant | 是 | 免费/托管收费 | 高精度混合检索 | 开源社区 | 性能均衡、混合搜索支持 |
- 初创团队/个人开发者:优先选择Chroma或Faiss,成本低且易上手。
- 企业级应用:Milvus或Weaviate,满足分布式和高可用需求。
- 全托管需求:Pinecone适合无运维团队的企业。
五、Chroma 基本操作

5.1. Chroma 安装
Chroma 可以通过 Python 的包管理工具 pip 来安装。首先确保你已经安装了 Python 和 pip。然后,在你的命令行工具中运行以下命令:
pip install chromadb
这将下载并安装最新版本的 Chroma 及其依赖项。
启动命令
命令行直接运行以下启动命令
# --path 指定数据文件存储目录./chromadb
chroma run --path ./chromadb --host=0.0.0.0 --port=8000
以下是启动成功的界面:

验证安装
为了验证 Chroma 是否成功安装,你可以尝试在 Python shell 或者你的 Python 脚本中导入 Chroma:
import chromadb
print(chromadb.__version__)
# 输出 0.6.1
如果这段代码能够顺利执行,并打印出 Chroma 的版本号,则说明安装成功。
5.2. Chroma 基本操作
使用 Python 操作Chroma向量数据库
创建连接
如果你在本地运行chroma,并且把数据存放在内存存储,可以这样创建客户端
from chromadb import Client
chroma_client = Client()
如果你在本地运行chroma,并且把数据存放在本地存储,可以这样创建客户端
from chromadb import Client
from chromadb import Settings
settings = Settings(persist_directory=r".\codes\chroma", is_persistent=True)
chroma_client = Client(settings=settings)
如果你在服务端运行chroma,服务器端存储数据,可以这样创建客户端
from chromadb import HttpClient
chroma_client = HttpClient(host='localhost', port=8000)
创建表
#创建或获取一个名为 "my_collection" 的集合
collection = chroma_client.create_collection(name="my_collection", get_or_create=True)
#或者
collection = chroma_client.get_or_create_collection(name="langchain")
添加数据
import uuid
def get_uuid():return str(uuid.uuid4())
ids=[get_uuid() for _ in range(2)]
documents = ["我今天去上学", "天气很好"]
collection.add(ids=ids, documents=documents)
collection.add(ids=get_uuid(), documents="外面下雨了")
查询数据
results = collection.get(include=["embeddings", "documents"])
collection.get()
删除数据
collection.delete(ids=['d687b743-b678-4124-8fef-15b5fd11c01e'])
更新数据
collection.update(ids=['8ad95c3e-57fb-498d-884e-84d52493983b'],documents=["我今天很高兴啊"])
相关文章:
向量数据库对比以及Chroma操作
一、向量数据库与传统类型数据库 向量数据库(Vector Storage Engine)与传统类型的数据库如关系型数据库(MySQL)、文档型数据库(MongoDB)、键值存储(Redis)、全文搜索引擎࿰…...
Python Matplotlib面试题精选及参考答案
绘制函数 y2x5 在区间 [1,10] 的折线图,设置标题和坐标轴标签 要绘制函数 y 2x 5 在区间 [1, 10] 的折线图,并设置标题和坐标轴标签,可借助 Python 的 matplotlib 库来实现。以下是详细的实现步骤与代码示例。 首先,要导入 mat…...
FiddlerScript学习笔记
参考官方文档:https://www.fiddlerbook.com/fiddler/dev/scriptsamples.asp json // 反序列化 static function jsonDecode(str : String){return Fiddler.WebFormats.JSON.JsonDecode(str).JSONObject; } // 序列化 static function jsonEncode(jsonObject : Obje…...
正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-5.1 uboot顶层Makefile分析-VSCode工程创建
前言: 本文是根据哔哩哔哩网站上“Arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用: …...
Linux内核IPoIB驱动中的RSS队列选择机制分析
摘要 本文深入分析了Linux内核中InfiniBand over Ethernet(IPoIB)驱动程序的发送队列选择函数ipoib_select_queue_sw_rss的实现。该函数通过复杂的条件编译和逻辑分支,实现了基于软件的接收端扩展(RSS)功能,确保网络流量在多队列环境下的高效分发,提升网络性能和吞吐量…...
js数组遍历十种方法
在JavaScript中,数组遍历可以有多种方法。以下列举了10种常用的数组遍历方式: For 循环 let array [1, 2, 3, 4, 5]; for (let i 0; i < array.length; i) {console.log(array[i]); }For-of 循环(ES6) let array [1, 2, 3, …...
OTP单片机调试工具之—单线数据编码
OTP单片机调试工具在实现过程中离不开单线数据的传输,那么使用哪一种方式的数据编码会比较好呢? 我所了解的主要有以下三种: 1.UART(串口),这种方式在单片机和pc之间进行传输都非常常见,效率比较…...
SWPU 2022 新生赛
webdog1__start if (isset($_GET[web])) {$first$_GET[web];if ($firstmd5($first)) md5 自等 web0e215962017 (md5后也是 0e) 登入后得到提示,robots.txt 访问 f14g.php 返回包里发现 hint > if (isset($_GET[get])){$get$_GET[get];if(!strs…...
Java 基础到进阶企业技巧(二)
在 Java 学习的旅程中,我们逐步探索了其丰富的知识体系,从基础的数据类型、字符串操作,到流程控制、运算符的运用,每一步都为我们构建强大的编程能力奠定基石。同时,了解这些知识在 Java 全栈开发中的应用场景…...
【后端】【django】【related_name】`related_name` 的作用
related_name 的作用 related_name 用于 Django 的 ForeignKey 和 OneToOneField,用于 反向访问 关联模型的数据。 默认情况下,Django 会自动生成一个反向关系的名字,但如果多个外键指向同一个模型,就可能发生命名冲突。related…...
Deepseek-R1大模型微调实战技术深度解析
一、Deepseek-R1架构特性与微调适配性分析 1.1 核心架构创新对微调的影响 Deepseek-R1基于Deepseek-V3-Base架构,通过MoE(Mixture-of-Experts)与MLA(Multi-Head Latent Attention)的协同设计,实现了参数规模与计算效率的平衡。其6710亿参数总量中,每个token仅激活37B参…...
Google最新生图模型Gemini-2.0-Flash-Exp免费用
Google发布新生图模型 Google释放出最新生图模型,在发布说明中提到: 2025年3月12日 在 Gemini-2.0-Flash-Exp 中发布原生图像输出功能 Gemini 2.0 Flash Experimental 模型发布,支持原生图像输出功能。开发者能够使用 Gemini 进行图像输出和…...
leecode695.岛屿的最大面积
跟求岛屿数量的题目差不多,依旧是深度搜索或者广度搜索问题 class Solution { private:int maxAreaOfIsland(vector<vector<int>>& grid,vector<vector<bool>>& visited,int x,int y){if(x<0||x>grid.size()||y<0||y>…...
助力字体管理,规避设计卡顿的得力工具
在设计领域,字体看似平常,却常常在关键时刻“掉链子”,让设计师们头疼不已。面对海量字体库,找到心仪那款宛如大海捞针,字体安装过多还会造成软件卡顿,这些麻烦事儿,频繁与字体打交道的朋友肯定…...
零基础上手Python数据分析 (4):Python数据结构精讲 - 列表、元组、字典、集合
写在前面 回顾一下,在之前的博客中,我们学习了 Python 的基本数据类型(数值、字符串、布尔值)和核心语法(运算符、变量、流程控制、函数、模块)。 现在,我们已经掌握了 Python 编程的基础知识。 接下来,我们将进入数据分析的关键环节: 数据组织。 在数据分析中,数据…...
数统院复试来啦,西电数学与统计学院—考研录取情况
4西安电子科技大学—数学与统计学院—考研录取统计 01、数学与统计学院各个方向 02、24数学与统计学院近三年复试分数线对比 数统院24年院线相对于23年院线增加高达30分,确实增长浮动比较高,接近30分的水平,因此大家更需要好好去努力…...
Windows功能之FTP服务器搭建
一、创作背景 之前有用linux系统搭建过ftp服务器,最近想着用windows系统也顺便搭建一个,看网上有第三方服务软件一键部署,记得windows可以不借助第三方软件就可以搭建,就想顺便操作试试,结果老是连接不上,费…...
leetcode hot100普通动态规划/基础DP
1️⃣1️⃣ 普通动态规划(基础 DP) 70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 题解: 动态规划Dynamic Programming ,在观察动态中找到如何规划解题的步骤…...
基于Python的天气预报数据可视化分析系统-Flask+html
开发语言:Python框架:flaskPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统登录 可视化界面 天气地图 天气分析 历史天气 用户管理 摘要 本文介绍了基于大数据…...
【鸿蒙开发】Hi3861学习笔记-Visual Studio Code安装(New)
00. 目录 文章目录 00. 目录01. Visual Studio Code概述02. Visual Studio Code下载03. Visual Studio Code安装04. Visual Studio Code插件05. 附录 01. Visual Studio Code概述 vscode是一种简化且高效的代码编辑器,同时支持诸如调试,任务执行和版本管…...
git报错:“fatal:refusing to merge unrelated histories“
新建仓库,克隆本地项目到新仓库,首次同步本地已提交的代码到远程时,报错:"fatal:refusing to merge unrelated histories" 。 报错意思是:致命的:拒绝合并无关的历史。 一、问题背景ÿ…...
前端面试笔试
前端面试笔试 1 相对路径和绝对路径的区别 区别:他们描述文件或目录位置的方式不同 绝对路径:绝对路径是指从系统的根目录开始的完整路径,无论当前工作目录在哪个位置,绝对路径始终指向文件或目录的确切位置。绝对路径适用…...
目前人工智能的发展,判断10年、20年后的人工智能发展的主要方向,或者带动的主要产业
根据2025年的最新行业研究和技术演进趋势,结合历史发展轨迹,未来10-20年人工智能发展的主要方向及带动的产业将呈现以下六大核心趋势: 一、算力革命与底层架构优化 核心地位:算力将成为类似“新能源电池”的基础设施,…...
Redis基本命令手册——五大类型
目录 一:基本操作 二:字符串(String) 三:哈希(Hash) 四:列表(List) 五:集合(Set) 六:有序集合(Zset&…...
历年华中科技大学计算机考研复试上机真题
历年华中科技大学计算机考研复试上机真题 2022华中科技大学计算机考研复试上机真题 2021华中科技大学计算机考研复试上机真题 2019华中科技大学计算机考研复试上机真题 在线评测:https://pgcode.cn 八进制 题目描述 输入一个整数,将其转换成八进制数…...
Python----数据分析(Pandas二:一维数组Series,Series的创建,Series的属性,Series中元素的索引与访问)
一、一维数组Series Series:一维数组,与Numpy中的一维array类似。它是一种类似于一维数组的对象,是由一组数据(各种 NumPy 数据类型)以及一组与之相关的数据标签(即索引)组成。 仅由一组数据也可产生简单的 Series 对象,用值列表生成 Series …...
java数据结构(复杂度)
一.时间复杂度和空间复杂度 1.时间复杂度 衡量一个程序好坏的标准,除了能处理各种异常,还有就是时间效率,当然,对于一些配置好的电脑数据处理起来就是比配置低的高,但从后期发展来看,当数据量足够庞大时&…...
windows协议不再续签,华为再无windows可用,将于四月发布鸿蒙PC
大家好,我是国货系创始人张云泽,最近不少小伙伴在后台问:“听说Windows协议要到期了?我的电脑会不会变砖?”还有人说:“华为笔记本以后用不了Windows了?鸿蒙系统能用吗?”今天咱们就…...
HTML+CSS基础(了解水平)
html 的介绍 学习目标 能够知道html的作用 1. html的定义 2. html的定义 HTML 的全称为:HyperText Mark-up Language, 指的是超文本标记语言。 标记:就是标签, <标签名称> </标签名称>, 比如: <html></html>、<h1><…...
[设计模式]1_设计模式概览
摘要:设计模式原则、设计模式的划分与简要概括,怎么使用重构获得设计模式并改善代码的坏味道。 本篇作概览与检索用,后续结合源码进行具体模式深入学习。 目录 1、设计模式原理 核心原则(语言无关) 本质原理图 原…...
