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

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
简介: 本文将介绍 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
                                )


相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
13天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
15天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
53 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
12天前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
20天前
|
人工智能 Cloud Native 容灾
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
|
28天前
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
82 3
|
1月前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
21天前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
6天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
20 4
|
4天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
13 1
|
13天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
70 1