首页 > 其他分享 >milvus笔记01--部署测试版本 milvus

milvus笔记01--部署测试版本 milvus

时间:2022-10-19 16:04:57浏览次数:75  
标签:01 -- disk0 mysql ---------- id milvus


milvus笔记01--部署测试版本milvus

1 milvus 简介

Milvus 是一款开源的向量相似度搜索引擎,支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及高速查询等特点。Milvus 集成了 Faiss、NMSLIB、Annoy 等广泛应用的向量索引库,提供了一整套简单直观的 API,让你可以针对不同场景选择不同的索引类型。此外,Milvus 还可以对标量数据进行过滤,进一步提高了召回率,增强了搜索的灵活性。

Milvus 服务器采用主从式架构 (Client-server model)。
在服务端,Milvus 由 Milvus Core 和 Meta Store 两部分组成:
Milvus Core 存储与管理向量和标量数据。
Meta Store 存储与管理 SQLite 和 MySQL 中的元数据,分别用于测试和生产。
在客户端,Milvus 还提供了基于 Python、Java、Go、C++ 的 SDK 和 RESTful API。
Milvus 在 Apache 2 License 协议下发布,于 2019 年 10 月正式开源,是 LF AI 基金会的孵化项目。Milvus 的源代码被托管于 Github。

应用场景
Milvus 在全球范围内已被数百家组织和机构所采用,广泛应用于以下场景:

  1. 图像、视频、音频等音视频搜索领域
  2. 文本搜索、推荐和交互式问答系统等文本搜索领域
  3. 新药搜索、基因筛选等生物医药领域

2 milvus_cpu 部署

前置条件:安装docker,具体可参考笔者博文: ​​docker笔记7–Docker常见操作​

2.1 基于sqlite部署milvus

  1. 下载镜像和配置文件
docker pull milvusdb/milvus:0.11.0-cpu-d101620-4c44c0
mkdir -p /disk0/milvus/conf
mkdir -p /disk0/milvus/db
mkdir -p /disk0/milvus/logs
mkdir -p /disk0/milvus/wal
cd /disk0/milvus/conf
wget
  1. docker 启动milvusdb 服务
sudo
  1. docker logs milvus_cpu_0.11.0 查看启动日志,发现正常启动:

2.2 基于mysql部署milvus

基于mysql的部署方式和上面差异不太大,只是需要更改 meta_uri 为mysql的地址即可, 以下在部署sqlite版本的基础上更新为mysql存储元数据;
mysql 配置方式可以参考笔者博文: ​​​docker笔记5–配置MySQL​

  1. 使用 docker 启动mysql
1)初始化MYSQL文件夹
mkdir -p /disk0/mysql
mkdir -p /disk0/mysql/logs
mkdir -p /disk0/mysql/conf
2)创建 mysql
docker run \
--name mysql-5.7 \
-p 3306:3306 \
-v /disk0/mysql/data:/var/lib/mysql \
-v /disk0/mysql/logs:/logs \
-v /disk0/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=111111 \
-d mysql:5.7
  1. 更新mysql 配置并重启milvus
1·)创建 milvus 数据库
docker exec -it mysql-5.7 bash
mysql -u root -p
输入密码111111
create database milvus;
退出 mysql
2)更新 milvus.yaml 中 meta_uri 为mysql
docker stop milvus_cpu_0.11.0 先停止milvus
vim /disk0/milvus/conf 修改 milvus.yaml 中的 原始sqlite 为 mysql
# meta_uri: sqlite://:@:/
meta_uri: mysql://root:[email protected]:3306/milvus
3)启动milvus
docker stop milvus_cpu_0.11.0
4)此时在mysql冲创建了一系列tables
mysql> use milvus;
Database changed
mysql> show tables;
+------------------+
| Tables_in_milvus |
+------------------+
| Collection |
| CollectionCommit |
| Field |
| FieldCommit |
| FieldElement |
| PartitionCommit |
| Partitions |
| SchemaCommit |
| Segment |
| SegmentCommit |
| SegmentFile |
+------------------+
11 rows in set (0.00 sec)

3 常见命令

注意:若本地下载的是 pymilvus==0.3.0 的pip3包,若拉取 ​​pymilvus git repo​​ 后,需要切换到0.3.0 的版本中,否则执行会报错(不同版本pip包存在不兼容现象);

切换到0.3.0分支,和pip包相对应
git checkout -b origin/0.3.0 remotes/origin/0.3.0

3.1 api 案例

  1. 安装pip 包
    pip3 install pymilvus==0.3.0
  2. 下载py 测试代码
    wget https://raw.githubusercontent.com/milvus-io/pymilvus/0.3.0/examples/example.py
  3. 运行测试代码
    python3 example.py
--------get collection info--------
{'auto_id': False,
'fields': [{'indexes': [{}],
'name': 'duration',
'params': {'unit': 'minute'},
'type': <DataType.INT32: 4>},
{'indexes': [{}],
'name': 'release_year',
'params': {},
'type': <DataType.INT32: 4>},
{'indexes': [{}],
'name': 'embedding',
'params': {'dim': 8},
'type': <DataType.FLOAT_VECTOR: 101>}],
'segment_row_limit': 4096}

----------list partitions----------
['American', '_default']

----------insert----------
Films are inserted and the ids are: [1, 2, 3]

----------flush----------
There are 0 films in collection `demo_films` before flush
There are 3 films in collection `demo_films` after flush

----------get collection stats----------
{'data_size': 22268,
'partition_count': 2,
'partitions': [{'data_size': 0,
'id': 1,
'row_count': 0,
'segment_count': 0,
'segments': None,
'tag': '_default'},
{'data_size': 22268,
'id': 2,
'row_count': 3,
'segment_count': 1,
'segments': [{'data_size': 22268,
'files': [{'data_size': 4124,
'field': '_id',
'name': '_raw',
'path': '/C_1/P_2/S_1/F_1'},
......
{'data_size': 4196,
'field': 'embedding',
'name': '_raw',
'path': '/C_1/P_2/S_1/F_3'}],
'id': 1,
'row_count': 3}],
'tag': 'American'}],
'row_count': 3}

----------get entity by id = 1, id = 200----------
> id: 1,
> duration: 208m,
> release_years: 2001,
> embedding: [0.8846436142921448, 0.30038607120513916, 0.1741494983434677, 0.839633047580719, 0.6289502382278442, 0.4159392714500427, 0.4668292999267578, 0.64024418592453]

----------search----------
- id: 3
- distance: 2.251066207885742
- release_year: 2003
- duration: 252
- embedding: [0.22678761184215546, 0.10217451304197311, 0.45235690474510193, 0.8751530051231384, 0.07362151145935059, 0.2575174868106842, 0.002853699494153261, 0.9267576932907104]

----------delete id = 1, id = 2----------
Get 0 entities by id 1, 2
There are 1 entities after delete films with 1, 2

3.2 RESTful api

​github RESTful api, 0.11.0/core/src/server/web_impl​

api 1:
curl -X GET "http://127.0.0.1:19121/state" -H "accept: application/json"
{"message":"Success","code":0}

api 2:
curl -X GET "http://127.0.0.1:19121/collections?offset=0&page_size=1" -H "accept: application/json"
{"code":0,"data":{"collections":[],"total":0},"message":"OK"

api 3:
curl -X POST "http://127.0.0.1:19121/collections" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"collection_name\":\"test_collection\",\"dimension\":1,\"index_file_size\":10,\"metric_type\":\"L2\"}"
{"message":"OK","code":0}

api 4:
curl -X GET "http://127.0.0.1:19121/collections/test_collection" -H "accept: application/json"|python -m json.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 98 100 98 0 0 49000 0 --:--:-- --:--:-- --:--:-- 49000
{
"data": {
"auto_id": true,
"collection_name": "test_collection",
"count": 0,
"segment_row_limit": 524288
}
}

4 说明

参考文档:
​​​milvus 官网​​​​milvus 安装概述​​​​milvus github​​ 笔者系统为 ubuntu1804 server,Docker version 19.03.14


标签:01,--,disk0,mysql,----------,id,milvus
From: https://blog.51cto.com/u_15767560/5775584

相关文章

  • Revit生成墙,顶部约束问题
    在结构样板项目中,生成的墙会自带顶部约束在​​Revit生成墙的坑​​这篇文章里,是墙的一个坑:底部约束。而本文要说的是另一个坑:顶部约束。这样,同样在建筑样板中生成墙的代码,......
  • Netty的第一个例子
    importio.netty.bootstrap.ServerBootstrap;importio.netty.channel.ChannelFuture;importio.netty.channel.ChannelInitializer;importio.netty.channel.ChannelOptio......
  • spring-事务概述
    目录​​Spring事务架构​​​​事务特性​​​​并发事务下存在的几个安全性问题​​​​脏读​​​​不可重复读​​​​幻读​​​​事务的隔离级别​​​​事务传播特性......
  • jQuery之ajax技术
    1:Ajax技术包含以下几点:   基于Web标准(XHTML+CSS)的展示  使用DOM进行动态显示和交互  使用XMLHttpRequest进行数据交换和相关操作  使用javascript将所......
  • 希尔排序的算法思想与实现
    希尔排序基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第......
  • jQuery技术之事件处理
    1:事件流模型   如果单击一次在HTML页面上的某个按钮,不仅会触发按钮的单击事件,还将触发按钮所属容器(div、span)等的单击事件,同时还将触发父级容器的单击事件,直至body、......
  • 老生常谈-FFmpeg 的编译问题轻松搞定
    前几天发了一篇​​FFmpeg调用AndroidMediaCodec进行硬解码​​的文章,这里面的技术点不算太难,也还是调用FFmpeg的常用接口操作,但重点在于FFmpeg的版本选择以及编......
  • 数据挖掘竞赛指南:曾经的数据挖掘少年,如今的阿里算法大佬
     Datawhale 作者:杰少,南京大学硕士简介:杰少,南京大学硕士,天池数据科学家,就职于阿里。KDD19,NIPS18,JDD19第二名,天池竞赛5次Top3,其他数据竞赛平台奖项20余项。数据竞赛近几......
  • docker笔记7--Docker常见操作
    docker笔记7--Docker常见操作​​1docker简介​​​​1.1基本概念​​​​1.2安装方法​​​​1.3nvidia-docker安装​​​​2常见命令​​​​2.1基础命令​​​​......
  • 【CV实践】图像检索从入门到进阶
    ​作者:阿水,Datawhale成员简介:阿水,Datawhale成员,北京航空航天大学硕士,多次获得国内外数据竞赛TOP名次图像检索是计算机视觉中基础的应用,可分为文字搜图和以图搜图。借助于卷......