跳到主要内容
版本:Cloud 开发指南

统计 Entity 数量

本文展示了如何统计 Collection 中的 Entity 数量,并解释了Entity 计数可能与实际数字不同的原因。

概述

Zilliz Cloud 为您提供了两种统计集合中 Entity 数量的方法。

  • 查询以count(*)作为输出字段

    要获取 Collection 中 Entity 的确切数量,您应该使用此方法并确保:

    • 您已加载目标 Collection。

    • 您已在查询请求中将consistency_level设置为Strong

    • 您已将output_field设置为['count(*)']

    在接收到此类查询时,Zilliz Cloud会向查询节点发送请求,并统计已加载到内存中的 Entity 数量。

    您可以在查询中指定多个 Partition 名称,以获取这些 Partition 中对应的 Entity 计数。有关详细信息,请参阅以 count(*) 作为输出字段的查询

  • 使用get_collection_stats()

    虽然你可以使用上述方法获取 Collection 的确切计数,但不建议在所有场合都使用它。这个过程本质上是一个查询,频繁调用可能会导致网络抖动,或者影响与你的业务相关的搜索和查询。

    如果统计结果的准确性不是主要考虑因素,您应该使用get_collection_stats()get_partition_stats()。虽然此调用提供的是估计的 Entity 计数,但您无需加载目标集合即可运行它,而且成本小到可以忽略不计,因为它只是报告内部跟踪器记录的内容。

    需要说明的是,所有数据操作都是异步的,这就是内部跟踪器无法实时反映 Entity 数量的原因。详情请参阅使用 get_collection_stats()

📘注释

上述两种方法均将具有相同主键的 Entity 视为独立 Entity。

除了通过编程方式获取 Entity 计数外,您还可以在Zilliz Cloud控制台中查看集群、Collection 或 Partition 的相关数据。您可以阅读Zilliz Cloud 控制台中的 Entity 计数以了解详细信息。

count(*) 作为输出字段的查询

要获取准确的 Entity 计数,请加载 Collection 并运行一个查询,并将 count(*) 作为输出字段,且将查询的 consistency_level 设置为 Strong

# Count without the entities in growing segments
res = client.query(
collection_name="test_collection",
# highlight-next-line
output_fields=['count(*)']
)

# Count with the entities in growing segments
res = client.query(
collection_name="test_collection",
# highlight-start
output_fields=['count(*)'],
consistency_level="Strong"
# highlight-end
)

# Count the entities in a specific partition
res = client.query(
collection_name="test_collection",
# highlight-start
output_fields=['count(*)'],
partition_names=['default']
# highlight-end
)

# Get the entity count
print(res[0]['count(*)'])
# Output
# 20

使用 get_collection_stats()

如上文所述,get_collection_stats() 返回 Collection 中 Entity 的估计数量,该数量可能与实际实体计数不同。您可以将此作为参考,而无需加载集合。

以下示例假定存在一个名为test_collection的集合。

from pymilvus import MilvusClient

# 1. Set up a milvus client
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)

# 2. Get the entity count of a collection
client.get_collection_stats(collection_name="test_collection")

# Output
#
# {
# 'row_count': 1000
# }

# 3. Get the entity count of a partition
client.get_partition_stats(
collection_name="test_collection",
partition_name="_default"
)

# Output
#
# {
# 'row_count': 1000
# }

Zilliz Cloud 控制台中的 Entity 计数

除了通过编程方式统计 Entity 数量外,您还可以访问 Zilliz Cloud 控制台,在以下页面中查找集群、Collection 或 Partition 中的 Entity 数量。

指标

您可以在集群的实体计数已加载实体(近似值)指标选项卡中找到它们。这两个值都是估算值。曲线中的值是通过使用get_collection_stats()获取的。如果没有进一步的数据插入和删除,实体计数曲线最终将反映当前集合中实体的实际数量。

MCbMbZ8McoWwc3xDzBtcd7ebn4f

Collection 详情

您可以在集合的详情标签页中找到其实际实体计数。此值是通过使用查询并将count(*)作为输出字段获得的。

OzLub9Ytvo7AJnxqlpWccT7nn7f

Partitions

您还可以使用集合的分区选项卡来查找其子分区中已加载实体的估计数量。此值通过使用get_partition_stats()获得。

SQ6qbK1qhoAeo9x4G61cgU6dnDU

常见问题解答

  • 为什么在我插入一些实体后,使用get_collection_stats()或get_partition_stats()获取的实体计数没有反映目标集合或分区中的实际实体数量?

    这些方法仅报告内部跟踪器记录的内容,由于所有数据操作都是异步的,因此可能与实际实体计数不同。

  • 在我插入或删除一些实体后,集合的指标标签页上的实体计数曲线为何没有变化?

    实体计数曲线中的值是在特定的时间点估计的,由于所有的数据操作都是异步的,所以在它们反映到曲线中之前可能会有一个延迟。

  • 为什么在集合的“分区”选项卡的“实体计数(近似)”列中显示的值在我插入或删除一些实体后没有改变?

    列出的分区所显示的值均为估算值。由于所有数据操作都是异步的,因此在它们反映到曲线中之前可能会有延迟。

  • 为什么集合概述选项卡中“已加载实体”显示的值不能反映集合中实体的实际数量?

    加载实体中显示的值是准确的。如果此值与从典型查询获得的实体数量之间存在差距,则集合中的某些实体可能具有相同的主键。

    请注意,以count(*)作为输出字段的查询会将具有相同主键的实体视为不同实体,而其他查询会在返回最终结果之前省略具有相同主键的实体。