一、什么是向量数据库?

向量数据库(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的使用的更多相关文章

  1. REDO 的内容:改变向量

    REDO 的内容 ---改变向量 redo的内容并不是sql语句,他是放的一些改变,叫改变向量. 数据库恢复的时候并不是执行sql语句,而是一个物理的过程,是一个数据块的覆盖.是改变数据块的大小. 可 ...

  2. 叮,GitHub 到账 550 美元「GitHub 热点速览 v.22.26」

    作者:HelloGitHub-小鱼干 如果你关注 GitHub 官方动态,你会发现它们最近频频点赞世界各地开发者晒出的 GitHub $550 sponsor 截图,有什么比"白嫖" ...

  3. AI听曲识歌!哼曲、口哨吹,都能秒识! ⛵

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 自然语言处理实战系列:https://www.showmeai.tech ...

  4. 以图搜图功能实现(windows10版)

    1,原理 存储:通过Core项目调取python接口,python通过使用towhee把图片转成向量存在milvus向量数据库中. 查询:通过Core项目调取python接口,python根据查询的图 ...

  5. 以图搜图(demo创建流程)

    window10添加向量数据库以及调用 创建docker 1,在windows功能中打开Hyper-V 和 容器 2,进入https://www.docker.com/ ,下载windows版本进行安 ...

  6. ChatGPT 开源了第一款插件,都来学习一下源码吧!

    3 月 23 日,OpenAI 又投出了一枚重磅炸弹:为 ChatGPT 推出插件系统! 此举意味着 ChatGPT 将迎来"APP Store"时刻,也就是围绕它的能力,形成一个 ...

  7. 碉堡!“万物皆可分”标记模型上线「GitHub 热点速览」

    这周有个让人眼前一亮的图像识别模型 segment-anything,它能精细地框出所有可见物体,它标记出的物体边界线清晰可见.如此出色的模型,自然获得了不少人的赞赏,开源没几天,就拿下了 18k+ ...

  8. JSP应用开发 -------- 电纸书(未完待续)

    http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术   第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...

  9. Oracle重做日志REDO

    什么是重做? 重做日志包含所有数据产生的历史改变记录. 重做日志目的是保证数据的安全,如果数据因特殊原因没有写到磁盘上,可以通过重做日志来恢复. 重做日志文件通常用于 恢复(实例恢复和介质恢复) 日志 ...

  10. Faiss源码剖析:类结构分析

    摘要:在下文中,我将尝试通过Faiss源码中各种类结构的设计来梳理Faiss中的各种概念以及它们之间的关系. 本文分享自华为云社区<Faiss源码剖析(一):类结构分析>,原文作者:HW0 ...

随机推荐

  1. 🎀EXCEL-时间函数

    简介 在Excel中,时间函数用于处理和操作日期和时间数据; 以下是Excel中常用的时间函数及其常见应用场景的总结. 函数 时间函数基础 TIME 语法:TIME(hour, minute, sec ...

  2. 康谋方案 | AVM合成数据仿真验证方案

    随着自动驾驶技术的快速发展,仿真软件在开发过程中扮演着越来越重要的角色.仿真传感器与环境不仅能够加速算法验证,还能在安全可控的条件下进行复杂场景的重复测试. 本文将分享如何利用自动驾驶仿真软件配置仿真 ...

  3. php -S命令开启一个纯php的web服务、命令行直接运行php代码

    php -S ip:port 命令可以开启一个纯php的web服务,如: php -S 127.0.0.1:8080 #  ip指定为localhost也是可以的 tips:端口号必填,服务的根目录即 ...

  4. PHP 实现微信异步回调数据打印知识分享

    一.引言 在微信支付.微信公众号消息推送等场景中,微信服务器会通过异步回调的方式将处理结果发送给我们的服务器.为了便于调试和监控,我们需要获取并打印这些回调数据.本文将详细介绍如何使用 PHP 的 f ...

  5. 3d xna fbx winfrom 读取

    本文通过参考网上资源做的一个例子. 本程序的功能就是通过xna 将3d 图像显示到winfrom 对他进行旋转操作. 首先我们先准备好两个文件夹 model  文件夹放fbx文件,textures 放 ...

  6. 遇到的问题之“Parameter 'item' not found. ”

    一.问题 Parameter 'item' not found. 参数item找不到 二.原因 这里的值没有写对,#{item}的item应是改为productSku,改后就不会报错了 三.解决方案 ...

  7. C#缩放图片形成新的图片

    // 加载原始Bitmap Bitmap originalBitmap = new Bitmap("C:\\Users\\Administrator\\Desktop\\test.bmp&q ...

  8. 从基础到高级,带你结合案例深入学习curl命令

    目录 简介 发送get请求 显示通信过程-v 模仿浏览器 -A 发送 Cookie -b 获取cookie -c 伪造来源页面 -e 构造GET请求查询字符串 -G 添加HTTP请求头 -H 显示头信 ...

  9. Ubuntu 通过 ssh 下载、上传文件

    下载文件 scp root@xxx.xxx.xxx.xxx:/root/file.txt /home 输入密码 上传文件 scp /home/file.txt root@xxx.xxx.xxx.xxx ...

  10. 2024牛客多校3J Rigged Games

    欢迎来我的博客看这篇题解! Problem 在两人竞技比赛中,对于任何正整数 \(a\) ,我们定义 \(BO(2 a-1)\) 如下:两名玩家继续竞争,直到其中一人获胜 \(a\) 次,那么他赢得整 ...