向量数据库 Chroma 和 Milvus的使用
一、什么是向量数据库?
向量数据库(Vector Database)是专门用来存储和检索向量数据的数据库。它广泛应用于图像搜索、推荐系统、自然语言处理等领域。
简单理解:
- 你给数据库一堆「特征向量」(比如图片、文本的数字表达)
- 你问数据库「最像这个向量的有哪些?」
- 数据库快速返回「最相似」的结果
二、Chroma 和 Milvus 简介
| 名称 | 特点 | 语言支持 | 适用场景 |
|---|---|---|---|
| Chroma | 轻量级、Python友好、易上手 | Python | 小项目、原型、快速开发 |
| Milvus | 企业级、高性能、支持多种部署方案 | 多语言(Python、Go等) | 大规模、高并发、复杂场景 |
三、环境准备
- 操作系统:Windows / Mac / Linux 都可以
- Python 版本:3.7 及以上
- 安装包管理器:pip
四、安装与配置
1 、安装 Chroma
直接安装Python库
pip install chromadb
2 、安装 Milvus
Milvus 分为两个部分:
- Milvus Server(核心数据库服务,需单独安装或用Docker运行)
- Milvus Python SDK(客户端,方便Python调用)
2.1、使用官方推荐脚本(最省心)
Milvus 官方提供的脚本会自动启用嵌入式 etcd 并正确配置启动:.
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh
bash standalone_embed.sh start
2.2、验证安装
启动后查看容器状态:
docker ps
应显示 milvus_standalone 正常运行
查看日志确认 embedded etcd 启动成功,无连接错误:
docker logs milvus_standalone
启动日志无报错
测试连接端口:
nc -zv localhost 19530
成功连接表示 Milvus 已正常监听端口。
2.3、安装 Milvus Python SDK
pip install pymilvus
五、使用示例
1、Chroma 简单示例
import chromadb
# 创建客户端 - 使用新的配置方式
client = chromadb.PersistentClient(path=".chromadb/")
# 创建/获取集合 - 使用 get_or_create_collection 避免重复创建错误
collection = client.get_or_create_collection("test_collection")
# 插入向量数据
collection.add(
documents=["苹果", "香蕉", "橘子"], # 文本描述
embeddings=[[0.1, 0.2, 0.3], [0.2, 0.1, 0.4], [0.15, 0.22, 0.35]], # 对应向量(示例)
ids=["1", "2", "3"]
)
# 查询最相似向量
results = collection.query(
query_embeddings=[[0.1, 0.2, 0.31]],
n_results=1
)
print(results)
返回结果
说明:
documents是你给数据库的文本embeddings是文本的向量表示(通常由模型生成)- 查询时传入一个向量,返回最接近的n个结果
2 、Milvus 简单示例
from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection
# 连接 Milvus
connections.connect("default", host="127.0.0.1", port="19530")
# 定义集合结构
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=3)
]
schema = CollectionSchema(fields, "test collection")
# 创建集合
collection = Collection("test_collection", schema)
# 插入数据
ids = [1, 2, 3]
embeddings = [
[0.1, 0.2, 0.3],
[0.2, 0.1, 0.4],
[0.15, 0.22, 0.35]
]
collection.insert([ids, embeddings])
# 创建索引
index_params = {
"index_type": "IVF_FLAT",
"params": {"nlist": 10},
"metric_type": "L2"
}
collection.create_index("embedding", index_params)
# 加载集合
collection.load()
# 查询向量
search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
results = collection.search([[0.1, 0.2, 0.31]], "embedding", search_params, limit=2)
for result in results[0]:
print(f"id: {result.id}, distance: {result.distance}")
运行结果
六、总结
| 功能 | Chroma | Milvus |
|---|---|---|
| 安装 | 纯Python库,简单快速 | 需要运行服务,推荐Docker部署 |
| 适合项目规模 | 小型、开发测试 | 大规模、生产环境 |
| 语言支持 | Python优先 | 多语言支持 |
| 性能 | 适中 | 高性能,支持分布式 |
向量数据库 Chroma 和 Milvus的使用的更多相关文章
- REDO 的内容:改变向量
REDO 的内容 ---改变向量 redo的内容并不是sql语句,他是放的一些改变,叫改变向量. 数据库恢复的时候并不是执行sql语句,而是一个物理的过程,是一个数据块的覆盖.是改变数据块的大小. 可 ...
- 叮,GitHub 到账 550 美元「GitHub 热点速览 v.22.26」
作者:HelloGitHub-小鱼干 如果你关注 GitHub 官方动态,你会发现它们最近频频点赞世界各地开发者晒出的 GitHub $550 sponsor 截图,有什么比"白嫖" ...
- AI听曲识歌!哼曲、口哨吹,都能秒识! ⛵
作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 自然语言处理实战系列:https://www.showmeai.tech ...
- 以图搜图功能实现(windows10版)
1,原理 存储:通过Core项目调取python接口,python通过使用towhee把图片转成向量存在milvus向量数据库中. 查询:通过Core项目调取python接口,python根据查询的图 ...
- 以图搜图(demo创建流程)
window10添加向量数据库以及调用 创建docker 1,在windows功能中打开Hyper-V 和 容器 2,进入https://www.docker.com/ ,下载windows版本进行安 ...
- ChatGPT 开源了第一款插件,都来学习一下源码吧!
3 月 23 日,OpenAI 又投出了一枚重磅炸弹:为 ChatGPT 推出插件系统! 此举意味着 ChatGPT 将迎来"APP Store"时刻,也就是围绕它的能力,形成一个 ...
- 碉堡!“万物皆可分”标记模型上线「GitHub 热点速览」
这周有个让人眼前一亮的图像识别模型 segment-anything,它能精细地框出所有可见物体,它标记出的物体边界线清晰可见.如此出色的模型,自然获得了不少人的赞赏,开源没几天,就拿下了 18k+ ...
- JSP应用开发 -------- 电纸书(未完待续)
http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术 第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...
- Oracle重做日志REDO
什么是重做? 重做日志包含所有数据产生的历史改变记录. 重做日志目的是保证数据的安全,如果数据因特殊原因没有写到磁盘上,可以通过重做日志来恢复. 重做日志文件通常用于 恢复(实例恢复和介质恢复) 日志 ...
- Faiss源码剖析:类结构分析
摘要:在下文中,我将尝试通过Faiss源码中各种类结构的设计来梳理Faiss中的各种概念以及它们之间的关系. 本文分享自华为云社区<Faiss源码剖析(一):类结构分析>,原文作者:HW0 ...
随机推荐
- Docker安装及使用,Docker 安装MySQL、安装Tomcat、安装RabbitMQ
CentOS7安装Docker Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经 ...
- IOC容器启动及Bean生成流程
目录 一.容器启动 IOC启动流程 重点 二.扫描并注册BeanDefination 加载并过滤资源 注册BeanDefination 三.BeanFactory后置处理 四.注册Bean后置处理器 ...
- 什么情况下会触发 Java 的 Full GC?
什么情况下会触发 Java 的 Full GC? Full GC(完全垃圾回收)是 Java 中的一个重要垃圾回收阶段,它会回收 整个堆内存,包括 新生代 和 老年代.触发 Full GC 的条件通常 ...
- Sentinel源码—5.FlowSlot借鉴Guava的限流算法
大纲 1.Guava提供的RateLimiter限流使用示例 2.Guava提供的RateLimiter简介与设计 3.继承RateLimiter的SmoothBursty源码 4.继承RateLim ...
- 一个开源、经典的 WPF 控件、组件和实用工具集合,值得参考学习!
前言 今天大姚给大家推荐一个开源.经典的 WPF 控件.组件和实用工具集合,对于想要自己编写 WPF UI 界面的同学可以参考借鉴学习:Extended.Wpf.Toolkit. 项目介绍 Exten ...
- Python 类不要再写 __init__ 方法了
花下猫语:我们周刊第 98 期分享过一篇文章,它指出了 __init__ 方法存在的问题和新的最佳实践,第 99 期也分享了一篇文章佐证了第一篇文章的观点.我认为它们提出的是一个值得注意和思考的问题, ...
- RabbitMQ消息的生存时间TTL(Time To Live)
目录 RabbitMQ消息的生存时间TTL MQ环境测试准备 代码实现 生产者 8080 测试 死信队列 自定义ttl消息 过期丢弃消息 总结 RabbitMQ消息的生存时间TTL TTL(Time ...
- Mybatis 框架课程第四天
目录 1 Mybatis 延迟加载策略 1.1 何为延迟加载 1.2 实现需求 1.3 使用 assocation 实现延迟加载 1.3.1 账户的持久层 DAO 接口 1.3.2 账户的持久层映射文 ...
- 字节大模型应用开发框架 Eino 全解(一)|结合 RAG 知识库案例分析框架生态
前言 大家好,这里是白泽,Eino 是字节开源的 Golang 大模型应用开发框架,诸如豆包.扣子等 Agent 应用或工作流都是借助这个框架进行开发. 我将通过<字节大模型应用开发框架 Ein ...
- 掌握Node.js原理,开启异步编程之旅
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...