背景

下图描述了 SDK 与 Milvus 通过 gRPC 进行的交互。想象一下 Milvus 是一个黑盒子。协议缓冲区用于定义服务器的接口,以及它们携带的信息的结构。因此,黑盒 Milvus 中的所有操作都是由 Protocol API 定义的。

交互

风筝协议API

Milvus Protocol API 由milvus.protocommon.protoschema.proto组成,它们是后缀为.proto的 Protocol Buffers 文件。为确保正常运行,SDK 必须通过这些 Protocol Buffers 文件与 Milvus 进行交互。

kite.proto

milvus.proto是 Milvus 协议 API 的重要组成部分,因为它定义了MilvusService,进一步定义了 Milvus 的所有 RPC 接口。

以下代码示例显示了接口CreatePartitionRequest。它有两个主要的字符串类型参数collection_namepartition_name,您可以根据它们启动分区创建请求。

创建分区请求

在第 19 行查看PyMilvus GitHub 存储库中的协议示例。

示例

您可以在此处找到CreatePartitionRequest的定义。

定义

欢迎希望使用不同编程语言开发 Milvus 功能或 SDK 的贡献者找到 Milvus 通过 RPC 提供的所有接口。

common.proto

common.proto定义了常用的信息类型,包括ErrorCodeStatus

common.proto

schema.proto

schema.proto在参数中定义了模式。以下代码示例是CollectionSchema的示例。

schema.proto

milvus.protocommon.protoschema.proto共同构成了Milvus的API,代表了所有可以通过RPC调用的操作。

如果深入源码仔细观察,会发现在调用create_index等接口时,实际上调用了describe_collectiondescribe_index等多个RPC接口。 Milvus 的很多对外接口是多个 RPC 接口的组合。

了解了 RPC 的行为之后,您就可以通过组合为 Milvus 开发新的功能。非常欢迎您发挥您的想象力和创造力,为 Milvus 社区做出贡献。

PyMilvus 2.0

对象关系映射(ORM)

简单来说,对象关系映射(ORM)是指当你对一个本地对象进行操作时,这样的操作会影响到服务器上对应的对象。 PyMilvus ORM 风格的 API 具有以下特点:

  1. 直接作用于对象。

  2. 隔离服务逻辑和数据访问细节。

  3. 隐藏了实现的复杂性,你可以在不同的 Milvus 实例上运行相同的脚本,而不管它们的部署方式或实现方式。

ORM 风格的 API

ORM风格API的精髓之一在于对Milvus连接的控制。例如,您可以为多台 Milvus 服务器指定别名,并仅使用它们的别名连接或断开它们。您甚至可以删除本地服务器地址,并通过特定连接精确控制某些对象。

控制连接

ORM风格API的另一个特点是,经过抽象后,所有的操作都可以直接对对象进行,包括集合、分区、索引。

您可以通过获取现有对象或创建新对象来抽象集合对象。您还可以使用连接别名将 Milvus 连接分配给特定对象,以便您可以在本地对这些对象进行操作。

要创建分区对象,您可以使用其父集合对象创建它,也可以像创建集合对象时那样进行。这些方法也可以用于索引对象。

在这些分区或索引对象存在的情况下,您可以通过它们的父集合对象来获取它们。

还有什么

建议通过我们的技术文档了解 PyMilvus。该文档由两个主要部分组成,包括我们的贡献者制作的自动化 API 参考和使用说明。

  • Milvus 技术文档

  • PyMilvus 源文档

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐