Milvus向量数据库02-Schema定义

Milvus向量数据库02-Schema定义

定义 Schema 是指为数据库中数据创建一个清晰有序的数据结构。Schema 可以揭示和解列数据之间的关系。因此,定义 Schema 是为了了解数据集中的所有数据,展示数据间联系,从而用最有效的方式表示数据关系。

1-定义 Schema

在 Zilliz Cloud 集群中,不同 Collection 的 Schema 可能不同。正确定义数据模型以表示数据集的结构十分重要。定义数据模型时,您需要考虑以下几个方面:

  • Entity

    Collection 中的 Entity 类似于传统数据库表格中的行。Entity 的每个属性对应传统数据库表格中的列。向 Collection 插入数据前,请先观察 Entity 之间共享的属性。

    例如, 您可以将书可以作为 Collection 中的 Entity,书的属性可以包括标题、作者、ISBN 和语言。

  • 数据类型

    Entity 的每个属性都有自己的数据类型。设置合适的数据类型以定义属性。

    例如,标题的数据类型应为可变长度字符串(VarChar)

  • Entity 属性值限制

    不同的数据类型可能带有不同的限制。例如,向量字段对向量维数有限制、VarChar字段对字符的最大长度有限制。

您需要花费一些时间来定义 Collection 的数据模型。当需要定义的数据属性特别多时,你需要花费的时间可能更多。因此,Zilliz Cloud 集群提供了动态和静态数据模型以满足您的不同需求。

动态数据列

1 个 Collection 可拥有 1 个主键字段和 1 个向量字段。您可以在待插入数据中包含动态数据列,无需手动定义数据集中的 Entity 属性。简单来说,在创建 Collection 时输入 Collection 名称和向量维数,Zilliz Cloud 会自动根据后续插入的数据推断哪些数据将以键值对的形式存入名为 $meta 的保留字段中。

以下示例代码片段创建了 1 个名为 medium_articles 的 Collection,且为该 Collection 开启了动态数据列。

# Connect using a MilvusClient object
from pymilvus import MilvusClient

CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT" # Set your cluster endpoint
TOKEN="YOUR_CLUSTER_TOKEN" # Set your token

# Initialize a MilvusClient instance
# Replace uri and API key with your own
client = MilvusClient(
    uri=CLUSTER_ENDPOINT, # Cluster endpoint obtained from the console
    token=TOKEN # API key or a colon-separated cluster username and password
)

# Create a collection
client.create_collection(
    collection_name="medium_articles",
    dimension=768
)

当您将 Entity 插入 Collection 时,Zilliz Cloud 将自动解析数据并将 Schema 中未定义的字段(也就是除了 idvector 字段以外的其它字段)以键值对的形式存入一个名为 $meta 的保留字段。

client.insert(
    collection_name="medium_articles",
    data: {
        "id": 0,
        "title": "The Reported Mortality Rate of Coronavirus Is Not Important",
        "vector": [0.041732933, 0.013779674, ...., -0.013061441],
        "link": "<https://medium.com/swlh/the-reported-mortality-rate-of-coronavirus-is-not-important-369989c8d912>",
        "reading_time": 13,
        "publication": "The Startup",
        "claps": 1100,
        "responses": 18
    }
)

📘说明

开启动态数据列可以帮助您灵活应对 Collection Schema 的变更诉求。建议您在创建 Collection 时,同步开启动态数据列。仅在如下情况下,不推荐使用动态数据列

  • 待插入数据各字段名称中包含特殊字符或转义字符。

  • 追求极致的过滤效率。

静态数据列

使用静态数据列可以确保数据准确,提高搜索结果可靠性。您可以执行以下操作以使用静态数据模型创建 Collection Schema:

from pymilvus import FieldSchema, CollectionSchema, DataType, Collection

fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="title", dtype=DataType.VARCHAR, max_length=512),
    FieldSchema(name="title_vector", dtype=DataType.FLOAT_VECTOR, dim=768),
    FieldSchema(name="link", dtype=DataType.VARCHAR, max_length=512),
    FieldSchema(name="reading_time", dtype=DataType.INT64),
    FieldSchema(name="publication", dtype=DataType.VARCHAR, max_length=512),
    FieldSchema(name="claps", dtype=DataType.INT64),
    FieldSchema(name="responses", dtype=DataType.INT64)
]

# 创建 Schema
schema = CollectionSchema(
    fields,
    description="Schema of Medium articles"
)

collection = Collection(
    name="medium_articles",
    description="Medium articles published between Jan and August in 2020 in prominent publications",
    schema=schema
)

2-数据类型

Zilliz Cloud 支持以下字段数据类型。不同字段类型支持的数据类型有所不同。

  • 主键字段

    • 64 位有符号整(INT64)

    • 可变长度字符串(VARCHAR)

  • 标量字段

    • 64 位有符号整(INT64)

    • 可变长度字符串(VARCHAR)

    • 8 位有符号整数(INT8)

    • 16 位有符号整数(INT16)

    • 32 位有符号整(INT32)

    • 单精度浮点数(FLOAT)

    • 双精度浮点数(DOUBLE)

    • 布尔值(BOOLEAN)

    • JSON

    • ARRAY

  • 向量字段

    • FLOAT_VECTOR:存储 32 位浮点数,常用于科学计算和机器学习中表示实数。

    • FLOAT16_VECTOR:存储 16 位半精度浮点数,用于深度学习和 GPU 计算中提高内存和带宽效率。

    • BFLOAT16_VECTOR:存储 16 位浮点数,具有与 Float32 相同的指数范围,但精度较低,常用于深度学习中减少内存和计算需求,同时不显著影响准确性。

    • SPARSE_FLOAT_VECTOR:存储非零元素及其对应索引的列表,用于表示稀疏向量。使用 SPARSE_FLOAT_VECTOR 时,不需要指定维度。

    • BINARY_VECTOR:以 0 和 1 的序列存储二进制数据,用于图像处理和信息检索中的紧凑特征表示。使用 BINARY_VECTOR 时,维度必须是 8 的倍数,范围从 8 到 32,768 * 8。


3-知识总结

以下是文章内容要点的思维导图:

Milvus向量数据库 Schema定义
定义 Schema
动态数据列
静态数据列
数据类型
数据结构
数据关系
数据模型定义
Entity
数据类型
Entity属性值限制
动态数据列定义
自动推断Entity属性
保留字段 $meta
示例代码创建Collection
插入Entity示例
动态数据列适用情况
不推荐使用情况
静态数据列定义
确保数据准确
提高搜索结果可靠性
创建Collection Schema示例
主键字段
标量字段
向量字段
支持的数据类型

详细知识点如下:

Milvus向量数据库 Schema定义

  • 定义 Schema:为数据库中数据创建清晰有序的数据结构,揭示和解列数据之间的关系。

定义 Schema

  • 数据结构:定义 Schema 以了解数据集中的所有数据。
  • 数据关系:展示数据间的联系。
  • 数据模型定义:正确定义数据模型以表示数据集的结构。
  • Entity:Collection 中的 Entity 类似于传统数据库表格中的行。
  • 数据类型:Entity 的每个属性都有自己的数据类型。
  • Entity属性值限制:不同数据类型可能带有不同的限制。

动态数据列

  • 动态数据列定义:在待插入数据中包含动态数据列,无需手动定义数据集中的 Entity 属性。
  • 自动推断Entity属性:Zilliz Cloud 会自动根据后续插入的数据推断哪些数据将以键值对的形式存入名为 $meta 的保留字段中。
  • 保留字段 m e t a ∗ ∗ :未定义的字段以键值对形式存入 ∗ ∗ meta**:未定义的字段以键值对形式存入 ** meta:未定义的字段以键值对形式存入meta
  • 示例代码创建Collection:创建名为 medium_articles 的 Collection,且为该 Collection 开启了动态数据列。
  • 插入Entity示例:将 Entity 插入 Collection,Zilliz Cloud 将自动解析数据。
  • 动态数据列适用情况:开启动态数据列可以帮助灵活应对 Collection Schema 的变更诉求。
  • 不推荐使用情况:待插入数据各字段名称中包含特殊字符或转义字符,追求极致的过滤效率。

静态数据列

  • 静态数据列定义:使用静态数据列可以确保数据准确,提高搜索结果可靠性。
  • 确保数据准确:静态数据列确保数据的准确性。
  • 提高搜索结果可靠性:提高搜索结果的可靠性。
  • 创建Collection Schema示例:使用静态数据模型创建 Collection Schema 的示例代码。

数据类型

  • 主键字段:64 位有符号整(INT64),可变长度字符串(VARCHAR)。
  • 标量字段:64 位有符号整(INT64),可变长度字符串(VARCHAR),8 位有符号整数(INT8),16 位有符号整数(INT16),32 位有符号整(INT32),单精度浮点数(FLOAT),双精度浮点数(DOUBLE),布尔值(BOOLEAN),JSON,ARRAY。
  • 向量字段:FLOAT_VECTOR,FLOAT16_VECTOR,BFLOAT16_VECTOR,SPARSE_FLOAT_VECTOR,BINARY_VECTOR。
  • 支持的数据类型:Zilliz Cloud 支持的字段数据类型。

### Milvus 向量数据库安装教程 #### 准备工作 为了顺利安装Milvus向量数据库,需提前准备好Docker环境。确保本地计算机已成功安装并配置好Docker服务[^3]。 #### 获取Milvus安装文件 访问GitHub上的官方发布页面获取最新版的Milvus安装包。对于此次安装而言,选择了版本号为2.3.2的记忆体优化版本,并将其命名为`docker-compose.yml`放置于指定路径下以便后续部署操作。 ```bash wget https://github.com/milvus-io/milvus/releases/download/v2.3.2/milvus-standalone-docker-compose.yml -O docker-compose.yml ``` #### 执行安装命令 进入存放`docker-compose.yml`文件所在的目录,在终端输入如下指令启动容器化后的Milvus实例: ```bash docker-compose up -d ``` 此过程将会自动拉取所需镜像并初始化运行环境,完成后即表示Milvus已经成功部署至本机环境中。 --- ### 使用方法概述 #### 创建集合(Collection) 在正式存储数据之前,需要定义一个或多个用于容纳实体记录的数据集——也就是所谓的“集合”。这一步骤可以通过Python SDK来实现自动化处理流程[^4]。 ```python from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection connections.connect("default", host="localhost", port="19530") fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128) ] schema = CollectionSchema(fields) collection_name = "example_collection" collection = Collection(name=collection_name, schema=schema) print(f"Successfully created collection: {collection.name}") ``` 上述脚本展示了怎样利用PyMilvus库连接远程服务器端口以及构建一个新的带有两个字段结构化的表单对象;其中一个是主键类型而另一个则是用来保存特征向量数组的空间维度设置为128维浮点数形式[^1]。 #### 插入数据项 有了预先设定好的表格框架之后就可以往里面填充实际观测得到的信息条目了。这里同样借助pymilvus提供的API接口完成批量写入动作。 ```python import numpy as np data_to_insert = [ [i for i in range(10)], # 主键列 [[np.random.rand() * 2 - 1 for _ in range(128)] for _ in range(10)] # 特征向量列表 ] mr = collection.insert(data_to_insert) print(mr) ``` 这段代码片段说明了如何生成随机数值作为测试样本加入到先前建立起来的那个名为`example_collection`的对象里去。每次调用insert函数都会返回有关这次事务的结果报告给开发者查看确认。 #### 查询相似度匹配结果 最后介绍一种非常实用的功能就是基于内容检索机制寻找最接近查询条件的目标元素。下面的例子演示了当给出某个特定模式时系统能够快速定位与其相仿的一系列候选者出来供进一步分析研究之用。 ```python search_params = {"metric_type": "L2", "params": {"nprobe": 10}} results = collection.search( data=[[0.5]*128], param=search_params, limit=3 ) for result in results: print(result.id, result.distance) ``` 以上便是针对初次接触Milvus用户的简易入门指导手册,涵盖了从零起步直至掌握基本功能应用在内的全过程讲解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值