メインコンテンツまでスキップ

エンティティをカウントする

この記事では、collection 内のエンティティをカウントする方法と、エンティティ数が実際の値と異なる可能性がある理由について説明します。

概要

Zilliz Cloud では、collection 内のエンティティをカウントするための 2 つの方法を提供しています。

  • 出力フィールドとして count(*) を指定したクエリ

    collection 内の正確なエンティティ数を取得するには、この方法を使用し、次の点を確実に満たしてください。

    • 対象の collection をロードしていること。

    • クエリリクエストで consistency_levelStrong に設定していること。

    • output_field['count(*)'] に設定していること。

    このようなクエリを受け取ると、Zilliz Cloud は query node にリクエストを送り、すでにメモリにロードされているエンティティをカウントします。

    クエリ内で複数の partition 名を指定して、それらの partition に対応するエンティティ数を取得できます。詳細については、出力フィールドとして count(*) を指定したクエリ を参照してください。

  • get_collection_stats() を使用する

    上記の方法を使えば collection の正確な件数を取得できますが、あらゆる場面での使用は推奨されません。この処理は基本的にクエリであり、頻繁に呼び出すとネットワークの揺らぎを引き起こしたり、業務に関連する検索やクエリに影響を与えたりする可能性があります。

    精度が最優先でない場合は、代わりに get_collection_stats()get_partition_stats() を使用してください。この呼び出しで得られるのは推定エンティティ数ですが、実行のために対象 collection をロードする必要はなく、内部トラッカーが記録している内容を報告するだけなので、コストは無視できるほど小さくなっています。

    参考として、すべてのデータ操作は非同期であるため、内部トラッカーはエンティティ数をリアルタイムで反映できません。詳細については、get_collection_stats() を使用する を参照してください。

📘注意

上記の 2 つの方法はいずれも、同じ primary key を持つエンティティを別々のエンティティとしてカウントします。

プログラムでエンティティ数を取得する代わりに、Zilliz Cloud コンソール上で cluster、collection、または partition の数値を確認することもできます。詳細については、Zilliz Cloud コンソール上のエンティティ数 を参照してください。

出力フィールドとして count(*) を指定したクエリ

正確なエンティティ数を取得するには、collection をロードし、出力フィールドとして count(*) を指定したクエリを実行し、クエリの整合性レベルを Strong に設定します。

python
# growing segment 内のエンティティを含めずにカウント
res = client.query(
collection_name="test_collection",
output_fields=['count(*)']
)

# growing segment 内のエンティティを含めてカウント
res = client.query(
collection_name="test_collection",
output_fields=['count(*)'],
consistency_level="Strong"
)

# 特定の partition 内のエンティティをカウント
res = client.query(
collection_name="test_collection",
output_fields=['count(*)'],
partition_names=['_default']
)

# エンティティ数を取得
print(res[0]['count(*)'])
# Output
# 20

get_collection_stats() を使用する

前述のとおり、get_collection_stats() は collection 内の推定エンティティ数を返すため、実際のエンティティ数とは異なる場合があります。これは collection をロードせずに参照値として利用できます。

次の例では、test_collection という名前の collection が存在すると仮定しています。

python
from pymilvus import MilvusClient

# 1. milvus client を設定
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)

# 2. collection のエンティティ数を取得
client.get_collection_stats(collection_name="test_collection")

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

# 3. partition のエンティティ数を取得
client.get_partition_stats(
collection_name="test_collection",
partition_name="_default"
)

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

Zilliz Cloud コンソール上のエンティティ数

プログラムでエンティティをカウントする代わりに、Zilliz Cloud コンソールにアクセスして、以下のページで cluster、collection、または partition のエンティティ数を確認することもできます。

Metrics

cluster の Metrics タブでは、Entity CountLoaded Entities (Approx.) を確認できます。どちらの値も推定値です。曲線上の値は、get_collection_stats() を使用して 取得されます。追加のデータ挿入や削除が行われなければ、Entity Count 曲線は最終的に現在の collection における実際のエンティティ数を反映します。

ZVYcwdlqAhOUqDb4vC3c2Hf8n5e

Collection Details

collection の詳細タブでは、その collection の実際のエンティティ数を確認できます。この値は、出力フィールドとして count(*) を指定したクエリを使用して取得されます。

PfXfwGQoLhW0OBbVMMfccM0Qnaf

Partitions

collection の Partitions タブを使用して、その子 partition にロードされているエンティティの推定数を確認することもできます。この値は get_partition_stats() を使用して取得されます。

LKThwnS2fhTj8vbFJpEcjAMunwf

FAQ

  • いくつかのエンティティを挿入した後、get_collection_stats() または get_partition_stats() を使用して取得したエンティティ数が、対象の collection または partition の実際のエンティティ数を反映しないのはなぜですか?

    これらのメソッドは内部トラッカーが記録している内容のみを報告するため、すべてのデータ操作が非同期であることから、実際のエンティティ数と異なる場合があります。

  • いくつかのエンティティを挿入または削除した後、collection の Metrics タブにある Entity Count 曲線が変化しないのはなぜですか?

    Entity Count 曲線の値は、特定の時点における推定値です。すべてのデータ操作は非同期であるため、曲線に反映されるまで遅延が生じる場合があります。

  • いくつかのエンティティを挿入または削除した後、collection の Partitions タブにある Entity Count (Approx.) 列に表示される値が変化しないのはなぜですか?

    一覧表示される partition の値はすべて推定値です。すべてのデータ操作は非同期であるため、曲線に反映されるまで遅延が生じる場合があります。

  • collection の Overview タブに表示される Loaded Entities の値が、collection 内の実際のエンティティ数を反映しないのはなぜですか?

    Loaded Entities に表示される値は正確です。この値と通常のクエリで取得したエンティティ数の間に差がある場合、collection 内の一部のエンティティが同一の primary key を持っている可能性があります。

    count(*) を出力フィールドとして指定したクエリは、同一の primary key を持つエンティティを別々のエンティティとして扱います。一方、その他のクエリでは、最終結果を返す前に同一の primary key を持つエンティティが省かれます。

Ctrl I