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

2023-11-13

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 https://raw.githubusercontent.com/milvus-io/milvus/0.11.0/core/conf/demo/milvus.yaml
    
  2. docker 启动milvusdb 服务
    sudo docker run -d --name milvus_cpu_0.11.0 \
    -p 19530:19530 \
    -p 19121:19121 \
    -v /disk0/milvus/db:/var/lib/milvus/db \
    -v /disk0/milvus/conf:/var/lib/milvus/conf \
    -v /disk0/milvus/logs:/var/lib/milvus/logs \
    -v /disk0/milvus/wal:/var/lib/milvus/wal \
    milvusdb/milvus:0.11.0-cpu-d101620-4c44c0
    Milvus 监听的端口号: 默认19530,一般可用于客户端连接
    Milvus HTTP 服务器监听的端口号:默认19121,一般可用于 http或者RESTful api 请求
    
    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
    
  2. 更新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:111111@10.120.75.102: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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

milvus笔记01--部署测试版本 milvus 的相关文章

  • 如何验证历史数据?

    目前 我们正在使用日历实例读取日期 以便使用 SparkSQL 选取最后一个月的记录 现在我们需要 如果在前一天添加额外的事件 我们还必须能够手动插入摘要开始和结束日期 以防我们需要手动重新运行之前时间段的作业 例如 手动重新运行表可能如下
  • Pyspark - 在结构化流上应用自定义函数

    我有 4 列 clienttimestamp sensor id activity incidents 从 kafka 流中 我在窗口中消费数据 预处理和聚合 如果我使用 count 进行 groupby 操作 则该流可以很好地在控制台中写
  • Spark 1.0.2(以及 1.1.0)挂在分区上

    我在 apache Spark 中遇到了一个奇怪的问题 希望得到一些帮助 从 hdfs 读取数据 并进行一些从 json 到对象的转换 后 下一阶段 处理所述对象 在处理 2 个分区 总共 512 个分区 后失败 这种情况发生在大型数据集上
  • SparkR 作业 100 分钟超时

    我编写了一个有点复杂的sparkR脚本并使用spark submit运行它 脚本基本上做的是逐行读取基于 hive impala parquet 的大表 并生成具有相同行数的新 parquet 文件 但似乎工作在大约 100 分钟后停止 这
  • 外部混洗:从内存中混洗大量数据

    我正在寻找一种方法来整理内存不适合的大量数据 大约 40GB 我有大约 3000 万个可变长度的条目 存储在一个大文件中 我知道该文件中每个条目的开始和结束位置 我需要对内存中不适合的数据进行洗牌 我想到的唯一解决方案是对包含以下数字的数组
  • hbase 作为 Web 应用程序中的数据库

    关于在真实的 Web 应用程序中使用 hadoop 或相关技术的一个大问题 我只是想了解 Web 应用程序如何使用 hbase 作为其数据库 我的意思是 这是大数据应用程序所做的事情 还是他们使用普通数据库并仅使用这些技术进行分析 拥有一个
  • 层次聚类大稀疏距离矩阵 R

    我试图在非常大的距离上执行 fastclust 但遇到了问题 我有一个非常大的 csv 文件 大约 9100 万行 因此 for 循环在 R 中花费太长时间 其中包含关键字 大约 50 000 个唯一关键字 之间的相似性 当我读入 data
  • 如何将数据从一个HDFS复制到另一个HDFS?

    我有两个 HDFS 设置 想要将一些表从 HDFS1 复制 而不是迁移或移动 到 HDFS2 如何将数据从一个HDFS复制到另一个HDFS 是否可以通过 Sqoop 或其他命令行 DistCp 分布式复制 是用于在集群之间复制数据的工具 它
  • Spark 提交 java.lang.IllegalArgumentException:无法从空字符串创建路径

    当我执行 Spark 提交时 我收到此错误 java lang IllegalArgumentException 无法从空字符串创建路径 我使用的是spark版本2 4 7 hadoop版本3 3 0 集成开发环境 JDK 8 首先我遇到了
  • R 中用于超大型数据集处理和机器学习的推荐包 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 看起来 R 确实是为处理可以完全拉入内存的数据集而设计的 建议使用哪些 R 包来对无法拉入内存的超大型数
  • 如何使用R将年度数据转换为月度数据?

    我有2000年至2015年15年的逐年GDP数据 我想将这些数据转换为月度数据 其中只有月份和年份 我只想将当年的值复制到所有月份 我怎样才能在 R 中做到这一点2010 年的值是 1708 我想为 2010 年的所有月份复制相同的值 我的
  • Flume的Spool Dir可以在远程机器上吗?

    每当新文件到达特定文件夹时 我就尝试将文件从远程计算机获取到我的 hdfs 我在flume中遇到了spool dir的概念 如果spool dir位于运行flume代理的同一台机器上 那么它工作得很好 有什么方法可以在远程计算机中配置假脱机
  • Hive 执行钩子

    我需要在 Apache Hive 中挂钩自定义执行挂钩 如果有人知道该怎么做 请告诉我 我当前使用的环境如下 Hadoop Cloudera 版本 4 1 2 操作系统 Centos 谢谢 阿伦 有多种类型的挂钩 具体取决于您要在哪个阶段注
  • 2TB CSV 中的帐号匿名化

    我有大约 2TB 的 CSV 其中第一个2 列包含两个身份证号码 这些数据需要匿名 以便数据可用于学术研究 匿名化可以 但不一定 是不可逆的 这些不是医疗记录 所以我不需要最奇特的加密算法 问题 标准哈希算法会生成很长的字符串 但我必须进行
  • Pig - 如何迭代一袋地图

    让我解释一下这个问题 我有这行代码 u FOREACH persons GENERATE FLATTEN 0 experiences as j dump u 产生以下输出 id 1 date begin 12 2012 descriptio
  • Postgresql - 在大数据库中使用数组的性能

    假设我们有一个包含 600 万条记录的表 有 16 个整数列和少量文本列 它是只读表 因此每个整数列都有一个索引 每条记录大约 50 60 字节 表名称为 项目 服务器为 12 GB RAM 1 5 TB SATA 4 核 所有 postg
  • 仅当尝试打开假定的缓存文件时,Hadoop 2 IOException

    我最近更新到 hadoop 2 2 使用本教程here http codesfusion blogspot com 2013 10 setup hadoop 2x 220 on ubuntu html m 1 我的主要作业类如下所示 并抛出
  • 在 Flink 流中使用静态 DataSet 丰富 DataStream

    我正在编写一个 Flink 流程序 其中我需要使用一些静态数据集 信息库 IB 来丰富用户事件的数据流 对于例如假设我们有一个买家的静态数据集 并且有一个传入的事件点击流 对于每个事件 我们希望添加一个布尔标志来指示事件的执行者是否是买家
  • 为什么 Spark 在字数统计时速度很快? [复制]

    这个问题在这里已经有答案了 测试用例 Spark 在 20 秒以上对 6G 数据进行字数统计 我明白映射减少 FP and stream编程模型 但无法弄清楚字数统计的速度如此惊人 我认为这种情况下是I O密集型计算 不可能在20秒以上扫描
  • (R 错误)错误:cons 内存耗尽(达到限制?)

    我正在处理大数据 并且有一个 70GB 的 JSON 文件 我正在使用 jsonlite 库将文件加载到内存中 我尝试过 AWS EC2 x1 16large 机器 976 GB RAM 来执行此负载 但 R 因错误而中断 Error co

随机推荐

  • 前端页面生成PDF方案之puppetter

    1 新建一个文件夹 例如 test 2 新建一个js文件 例如test js 3 进入test文件夹 在该目录下运行命令行 并执行下面命令 npm init 4 运行命令安装 npm i puppetter 5 编辑test js cons
  • 常量池、运行时常量池、字符串值基本概念区分

    常量池 Constant Pool 常量池数据编译期被确定 是Class文件中的一部分 存储了类 方法 接口等中的常量 当然也包括字符串常量 字符串池 字符串常量池 String Pool String Constant Pool 是常量池
  • 微信公众平台开发笔记4(关注回复自定义消息)

    基于WXJava开发 最终目的 实现关注回复自定义消息 一条文本 一条图片 点击菜单发送视频或音频 音乐可以发送但是不能正常播放 猜测是填写的地址有问题 音频上传时需要先在接口测试平台多媒体文件上传接口上传缩略图 jpeg 新建WxMess
  • 从0实现基于Linux socket聊天室-实现聊天室的登录、注册功能-3

    上一篇我们已经讲了如何搭建一个多线程的服务器模型 可以支持多个客户端同时连接服务器 本篇我们来实现多个客户端 如何实现向服务器注册信息 并实现登录的功能 想了解更多Linux 编程知识 请关注 公众号 一口Linux 数据结构 接着上一篇的
  • Redis学习:哨兵模式

    主从切换技术的方法是 当主服务器宕机后 需要手动把一台从服务器切换为主服务器 这就需要人工干预 费事费力 还会造成一段时间内服务不可用 这不是一种推荐的方式 更多时候 我们优先考虑哨兵模式 一个典型哨兵模式 哨兵配置文件 sentinel
  • freeCAD part工作台,两个物体做合集相加的布尔组合先后顺序区别

    两个紧挨 空间尺寸上无缝隙 的物体 在part 工作台下做union的布尔操作 先选中和后选中的物体顺序还是有区别的 之前一直没注意 一直遇到问题才发现 例如有如图的2个物体 这里面的cut和fusion003已经做好了 现在我想把他组合到
  • c语言中英文转换器在线转换器,汉英转换器

    路由器之家网今天精心准备的是 汉英转换器 下面是详解 汉译英 英语是国际语言 因此我们非常重视英语的 English is an international language Thus we attach great importance
  • 深入学习jquery源码之isFunction()和isPlainObject()

    深入学习jquery源码之isFunction 和isPlainObject isArray obj 概述 测试对象是否为数组 参数 obj Object 用于测试是否为数组的对象 b append isArray b true b isF
  • 网关Netfilx Zuul:---(Eureka高可用操作)

    之前我们创建完成了3个Eureka的客户端的服务操作 你会发现我们还是没有能够通过微服来进行对他访问 还是必须通过自己服务的端口号来进行访问 那么我们的微服务是没有能够完成的 这个时候我们就需要通过网关进行操作 其实网关就是为客户端提供统一
  • 使用IntelliJ IDEA中的Spring Initializr来快速构建Spring Boot/Cloud工程

    我相信许多初学者都看了Spring Boot和Spring Cloud相关的博文中 都会涉及Spring Boot工程的创建的问题 而一般所看到的都是使用IntelliJ IDEA 工具来创建 并且方便许多 而创建的方式多种多样之前我是通过
  • 标签下载文件重命名失败,download 无效

    最近用到 a 标签实现文件下载并对文件进行重新命名 遇到了一些问题 文件重命名一直失败 所幸最终还是解决了 在此记录一下 避免后来者踩坑 HTML a 元素可以创建一个到其他网页 文件 同一页面内的位置 电子邮件地址或任何其他URL的超链接
  • 极验滑块识别-通用滑块识别

    遇到滑块问题 在写爬虫的时候 经常会遇到滑块问题 很多次都想过尝试如何攻破滑块 但是每次都没成功 除了最开始的极验滑块 当时通过原图和滑块图的对比 能够得出缺口坐标 但是随着极验 网易 腾讯滑块的更新 已经不能够找到原图了 下面给出滑块通杀
  • MATLAB中表示点形状、颜色的常见符号

    颜色字符串有 c m y r g b w 和k 分别表示青 红紫 黄 红 绿 白和黑 线型字符串有 为实线 为虚线 为点线 为点虚线 及 none 表示不用线型 标记形式有 o 和 x 填入 s 代表正方形 d 代表菱形 A 为上三角形 v
  • 2020第十一届蓝桥杯10月份省赛真题(JavaB组题解)

    2020第十一届蓝桥杯10月份省赛真题 JavaB组题解 试题 A 门牌制作 试题 B 寻找 2020 试题 C 蛇形填数 试题 D 七段码 试题 E 排序 试题 F 成绩分析 试题 G 单词分析 试题 H 数字三角形 试题 I 子串分值和
  • 代码质量的评价标准

    如何评价代码质量 代码质量的评价比较主观 一般会使用以下几个词汇 可读性 可扩展性 可维护性 灵活 优雅 可重用性 可测试性 这些是从不同方面来评价 但是各个维度都彼此关联 譬如可读性和可扩展性好 我们就说这段代码的可维护性比较好 代码质量
  • QT多线程下的信号与槽机制

    目录 1 QThread类 2 创建并启动线程 3 多线程信号与槽 4 信号与槽的调用线程 5 调整信号与槽所在线程的依附关系 6 信号与槽的连接方式 QT 中 QObject 作QT中类的最终父类 具有自定义信号与槽的能力 只要继承自这个
  • javaj经典程序编程50题

    JAVA基础编程练习50题 本文对50道经典的java程序题进行详细解说 对于初学者可以跳过一些逻辑性太强的题目 比如第一题用到了方法的递归 初学者可能不理解 最好先看那些有if for while可以简单解决的程序题 但是 对于比较深入学
  • 4键电子手表说明书_4键电子手表怎么调时间的方法

    现在除了很多喜欢购买机械表以外 还有很多人喜欢购买石英表 其中就有很多人购买了4键电子手表 但是很多人往往却并不知道4键电子手表怎么调时间 那么我们今天拿卡西欧4键电子手表为例子 给大家讲解以下4键电子手表怎么调时间 首先 我们可以轻松观察
  • Linux删除文件夹命令

    Linux删除文件夹命令 linux删除目录很简单 很多人还是习惯用rmdir 不过一旦目录非空 就陷入深深的苦恼之中 现在使用rm rf命令即可 直接rm就可以了 不过要加两个参数 rf 即 rm rf 目录名字 r 就是向下递归 不管有
  • milvus笔记01--部署测试版本 milvus

    milvus笔记01 部署测试版本milvus 1 milvus 简介 2 milvus cpu 部署 2 1 基于sqlite部署milvus 2 2 基于mysql部署milvus 3 常见命令 3 1 api 案例 3 2 RESTf