云原生向量数据库Milvus(二)-数据与索引的处理流程、索引类型及Schema(下)

简介: 本文将介绍 Milvus 系统中数据写入、索引构建、数据查询的具体处理流程,同时,还会介绍Milvus支持的索引类型;另外,还将讲述如何定义字段和集合Schema。


距离计算公式

Milvus 基于不同的距离计算方式比较向量间的距离。根据插入数据的形式,选择合适的距离计算方式能极大地提高数据分类和聚类性能。

浮点型向量主要使用以下距离计算公式:

  • 欧氏距离 (L2): 主要运用于计算机视觉领域。
  • 内积 (IP): 主要运用于自然语言处理(NLP)领域。

二值型向量主要使用以下距离计算公式:

  • 汉明距离 (Hamming): 主要运用于自然语言处理(NLP)领域。
  • 杰卡德距离 (Jaccard): 主要运用于化学分子式检索领域。
  • 谷本距离 (Tanimoto): 主要运用于化学分子式检索领域。
  • 超结构 (Superstructure): 主要运用于检索化学分子式的相似超结构。
  • 子结构 (Substructure): 主要运用于检索化学分子式的相似子结构。


Milvus 目前支持的距离计算方式与数据格式、索引类型之间的兼容关系以下表格所示。

数据格式 距离计算方式 索引类型
浮点型向量 欧氏距离 (L2)
内积 (IP)
FLAT
IVF_FLAT
IVF_SQ8
IVF_PQ
HNSW
IVF_HNSW
RHNSW_FLAT
RHNSW_SQ
RHNSW_PQ
ANNOY
二值型向量 杰卡德距离 (Jaccard)
谷本距离 (Tanimoto)
汉明距离 (Hamming)
BIN_FLAT
BIN_IVF_FLA
二值型向量 超结构 (superstructure)
子结构 (substructure)
BIN_FLAT

Schema


字段Schema

字段Schema是字段的逻辑定义。 这是在定义集合Schema和创建集合之前需要去定义的。

注:Milvus 2.0 只支持一个集合中的一个主键字段。

字段 schema 属性

属性 描述 注释
name 集合中字段的名称 数据类型:String。必须的
dtype 字段的数据类型 必须的
description 字段的描述 数据类型: String。可选的
is_primary 是否将该字段设置为主键字段 数据类型: Boolean (true or false)。 主键字段为必填项
dim 向量的维数 数据类型: Integer ∈[1, 32768]。对于向量字段是必需的


创建一个字段 schema

from pymilvus import FieldSchema
# 主键
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
复制代码


字段支持的数据类型

DataType 定义字段包含的数据类型。 不同的字段支持不同的数据类型。

  • 主键字段支持的数据类型:
  • INT8: numpy.int8
  • INT16: numpy.int16
  • INT32: numpy.int32
  • INT64: numpy.int64
  • 标量字段支持的数据类型:
  • BOOL: Boolean (true or false)
  • INT8: numpy.int8
  • INT16: numpy.int16
  • INT32: numpy.int32
  • INT64: numpy.int64
  • FLOAT: numpy.float32
  • DOUBLE: numpy.double
  • 向量字段支持的数据类型:
  • BINARY_VECTOR: Binary vector
  • FLOAT_VECTOR: Float vector

集合 Schema


集合 schema 是 集合 的逻辑定义。通常你需要在定义 集合 schema 和创建集合之前定义字段 schema。

集合 schema 的属性

属性 描述 备注
field 要创建的 collection 中的 field 强制
description collection 描述 数据类型:String。 可选
auto_id 是否启用自动分配 ID (即 primary key) 数据类型:Boolean (truefalse)。 可选


创建一个集合 schema

先定义字段 schema,再定义集合 schema。

from pymilvus import FieldSchema, CollectionSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
schema = CollectionSchema(fields=[id_field, age_field, embedding_field], auto_id=False, description="desc of a collection")
复制代码



使用指定的 schema 创建集合:

from pymilvus import Collection
collection_name1 = "tutorial_1"
collection1 = Collection(name=collection_name1, schema=schema, using='default', shards_num=2)
复制代码


注意: 你可以使用 shards_num 参数定义分片编号,并通过在 using 中指定别名来定义您希望在哪个 Milvus 服务器中创建集合。

你也可以使用 Collection.construct_from_dataframe 自动从 DataFrame 生成一个 collection schema 并创建一个 collection。

import pandas as pd
df = pd.DataFrame({
        "id": [i for i in range(nb)],
        "age": [random.randint(20, 40) for i in range(nb)],
        "embedding": [[random.random() for _ in range(dim)] for _ in range(nb)]
    })
collection, ins_res = Collection.construct_from_dataframe(
                                'my_collection',
                                df,
                                primary_field='id',
                                auto_id=False
                                )


相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
11月前
|
存储 数据管理 数据库
数据字典是什么?和数据库、数据仓库有什么关系?
在数据处理中,你是否常困惑于字段含义、指标计算或数据来源?数据字典正是解答这些问题的关键工具,它清晰定义数据的名称、类型、来源、计算方式等,服务于开发者、分析师和数据管理者。本文详解数据字典的定义、组成及其与数据库、数据仓库的关系,助你夯实数据基础。
数据字典是什么?和数据库、数据仓库有什么关系?
|
10月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
10月前
|
人工智能 Java 关系型数据库
使用数据连接池进行数据库操作
使用数据连接池进行数据库操作
243 11
|
11月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
1043 0
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
1933 1
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
713 0
|
10月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
930 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
908 0
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
10709 2

热门文章

最新文章