PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比

相似度查询工具

1.背景

想要实现一个图片特征向量相似度搜索的功能,项目使用的是Java开发,数据库是PostgreSQL,可选择的方案有:

  • Vector database - Milvus部署方便,有可视化界面Attu,有JavaSDK(但是需要专门部署)。
  • PostgreSQL插件(Cube 支持100维,Pase 支持512维,Vector 支持16000维)。

由于提取的图片的特征向量有1024维,所以只能使用Milvus和PostgreSQL插件Vector了。

2.应用

2.1 Milvus

Milvus官网有详细的安装流程和代码这里不再赘述,使用Docker安装,版本为2.2.9,这里为大家提供一个简单的工具类,数据库连接参数没有参数化,小伙伴们可以优化,对结果数据进行了简单的格式化:

结果封装:

@Data
@Builder
public class MilvusRes {
    public float score;
<think>我们正在讨论的是在Docker部署Milvus中启用账户认证登录功能。 根据Milvus的官方文档,从2.2.x版本开始,Milvus支持了用户名密码的认证功能。在Docker部署中,我们需要通过环境变量来配置认证。 步骤: 1. 在启动Milvus容器时,设置环境变量`MILVUS_SECURITY_AUTHORIZATION_ENABLED`为`true`,以启用认证。 2. 设置环境变量`MILVUS_SECURITY_USERNAME``MILVUS_SECURITY_PASSWORD`来指定默认的管理员账户密码。 注意:Milvus默认提供了一个管理员账户(root),但为了安全,我们应该设置自己的用户名密码。 示例:使用docker run命令启动Milvus(这里以standalone模式为例): ``` docker run -d \ --name milvus-standalone \ -p 19530:19530 \ -p 9091:9091 \ -e MILVUS_SECURITY_AUTHORIZATION_ENABLED=true \ -e MILVUS_SECURITY_USERNAME=root \ -e MILVUS_SECURITY_PASSWORD=Milvus \ milvusdb/milvus-standalone:latest ``` 但是,请注意,上述方式设置的是root账户的密码。Milvus还支持多用户管理,但需要额外的配置(如通过SQLite或MySQL存储用户信息)以及使用Milvus的管理API来创建用户。 对于生产环境,建议: 1. 使用集群模式部署使用helm chart在Kubernetes上部署)以获得更好的可扩展性安全性。 2. 使用外部存储(如MySQL)来存储用户信息,这样可以通过Milvus的管理API(通过9091端口)来创建管理用户。 在Docker部署中,我们也可以使用环境变量来配置使用MySQL作为元数据存储(这样用户信息也会存储在MySQL中)。但是,在standalone模式下,默认使用SQLite。 要使用MySQL,需要设置以下环境变量(以standalone模式为例): ``` docker run -d \ --name milvus-standalone \ -p 19530:19530 \ -p 9091:9091 \ -e MILVUS_SECURITY_AUTHORIZATION_ENABLED=true \ -e MILVUS_SECURITY_USERNAME=root \ -e MILVUS_SECURITY_PASSWORD=Milvus \ -e METASTORE_TYPE=mysql \ -e MYSQL_HOST=your_mysql_host \ -e MYSQL_PORT=3306 \ -e MYSQL_USER=root \ -e MYSQL_PASSWORD=your_mysql_password \ -e MYSQL_DATABASE=milvus_meta \ milvusdb/milvus-standalone:latest ``` 启用认证后,客户端连接时需要提供用户名密码。例如,使用PyMilvus: ```python from pymilvus import connections connections.connect( alias="default", host='localhost', port='19530', user='root', password='Milvus' ) ``` 注意:如果使用集群部署,配置方式类似,但通常通过helm chart的values.yaml来配置。 另外,Milvus还支持TLS加密通信,以进一步增强安全性。但本问题仅关注账户认证。 引用:Milvus官方文档中关于安全认证的部分[^1]。 因此,在Docker部署中启用账户认证,主要是通过环境变量设置开启认证并设置初始管理员账户密码。 注意:在Milvus 2.2.0之前,认证功能可能不可用,请确保使用2.2.0及以上版本。 相关问题: 1. 如何在Kubernetes上部署Milvus集群并启用认证? 2. 如何通过Milvus的管理API创建新用户? 3. 如何在Milvus中配置TLS加密?</think>### 在 Docker 部署Milvus 中启用账户认证 Milvus 从 **2.2.0 版本**开始支持账户认证功能。以下是基于 Docker 部署的配置步骤: --- #### 1. **修改 `docker-compose.yml` 文件** 在 Milvus Standalone 的配置中添加安全相关环境变量: ```yaml services: milvus-standalone: image: milvusdb/milvus-standalone:v2.2.3 environment: # 启用认证 MILVUS_SECURITY_AUTHORIZATION_ENABLED: "true" # 设置管理员账户(默认用户名为 root) MILVUS_SECURITY_USERNAME: "root" MILVUS_SECURITY_PASSWORD: "YourSecurePassword123!" # 元数据存储(必须使用 MySQL 或 PostgreSQL) METASTORE_TYPE: "mysql" MYSQL_HOST: "mysql" MYSQL_PORT: "3306" MYSQL_USER: "root" MYSQL_PASSWORD: "mysql_password" depends_on: - mysql ``` > 📌 **关键说明**: > - 必须配置 `METASTORE_TYPE`(SQLite 不支持认证) > - 默认管理员账户固定为 `root`,密码通过环境变量设置 > - 需要同时启动 MySQL/PostgreSQL 容器 --- #### 2. **启动 Milvus 服务** ```bash docker-compose up -d ``` --- #### 3. **验证认证功能** 使用 `pymilvus` 连接测试: ```python from pymilvus import connections # 无认证连接会失败 try: connections.connect(host="localhost", port="19530") # 触发 AuthenticationException except Exception as e: print("未认证访问被拒绝") # 正确方式:带凭证连接 connections.connect( alias="default", host="localhost", port="19530", user="root", # 管理员用户名 password="YourSecurePassword123!" # 环境变量设置的密码 ) print("认证成功!") ``` --- #### 4. **管理用户账户(可选)** 通过 Milvus 管理 API 创建新用户: ```bash # 创建新用户 curl -X POST --location "http://localhost:9091/api/v1/user" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer root:YourSecurePassword123!" \ -d '{"username": "new_user", "password": "UserPassword456!"}' # 响应示例:{"username":"new_user","createdAt":"2023-05-01T12:00:00Z"} ``` --- ### 关键配置说明 | 环境变量 | 必填 | 说明 | |----------|------|------| | `MILVUS_SECURITY_AUTHORIZATION_ENABLED` | 是 | 设为 `true` 启用认证 | | `MILVUS_SECURITY_USERNAME` | 是 | 管理员用户名(固定为 `root`) | | `MILVUS_SECURITY_PASSWORD` | 是 | 管理员密码 | | `METASTORE_TYPE` | 是 | 必须为 `mysql` 或 `postgres` | > ⚠️ **注意**: > 1. SQLite 不支持账户认证 > 2. 所有客户端(Python/Java/Go SDK)均需提供用户名密码 > 3. 生产环境建议启用 TLS 加密通信[^1] --- ### 常见问题排查 1. **认证失败** - 检查环境变量拼写(注意 `MILVUS_SECURITY_` 前缀) - 确认 Milvus 版本 ≥ 2.2.0:`docker exec <container> milvus run -v` 2. **元数据存储错误** - 确保 MySQL/PostgreSQL 容器正常运行 - 验证 `docker-compose.yml` 中的数据库连接参数 --- ### 引用 [^1]: Milvus 官方认证文档:https://milvus.io/docs/authenticate.md ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值