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

エンティティのカウント

この記事では、コレクション内のエンティティをカウントする方法と、エンティティ数が実際の数と異なる場合がある理由について説明します。

概要​

Zilliz Cloud では、コレクション内のエンティティをカウントする 2 つの方法を提供しています。

  • count(*) を出力フィールドとするクエリ

    コレクション内の正確なエンティティ数を取得するには、この方法を使用し、次の点を確認してください。

    • 対象コレクションをロードしていること。

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

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

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

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

  • get_collection_stats() を使用する

    上記の方法を使用するとコレクションの正確な数を取得できますが、どこでも使用することは推奨されません。この処理は基本的にクエリであり、頻繁に呼び出すとネットワークのジッターが発生したり、ビジネスに関連する検索やクエリに影響を与えたりする可能性があります。

    精度が主な関心事でない場合は、代わりに get_collection_stats() と get_partition_stats() を使用してください。この呼び出しは推定のエンティティ数を提供しますが、実行するために対象コレクションをロードする必要がなく、内部トラッカーが記録した内容を報告するだけなのでコストは無視できるほど小さいです。

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

Notes

上記の両方の方法では、同じプライマリキーを持つエンティティを別々のエンティティとしてカウントします。

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

count(*) を出力フィールドとするクエリ​

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

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

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

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

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

get_collection_stats() の使用​

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

次の例では、test_collection という名前のコレクションが存在することを前提としています。

python
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 コンソールでのエンティティ数​

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

メトリクス​

クラスターの Entity Count と Loaded Entities (Approx.) は、その Metrics タブで確認できます。どちらの値も推定値です。曲線内の値は get_collection_stats() を使用して取得されます。これ以上データの挿入や削除がなければ、Entity Count の曲線は最終的に現在のコレクションの実際のエンティティ数を反映します。

ZVYcwdlqAhOUqDb4vC3c2Hf8n5e

コレクションの詳細​

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

PfXfwGQoLhW0OBbVMMfccM0Qnaf

パーティション​

コレクションの Partitions タブを使用して、その子パーティション内のロード済みエンティティの推定数を確認することもできます。この値は、get_partition_stats() を使用して取得されます。

LKThwnS2fhTj8vbFJpEcjAMunwf

FAQ​

  • get_collection_stats() または get_partition_stats() を使用して取得したエンティティ数が、一部のエンティティを挿入した後で対象のコレクションまたはパーティションの実際のエンティティ数を反映しないのはなぜですか?

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

  • 一部のエンティティを挿入または削除した後で、コレクションの Metrics タブにある Entity Count 曲線が変化しないのはなぜですか?

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

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

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

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

    Loaded Entities に表示される値は正確です。この値と通常のクエリで取得されるエンティティ数との間に差がある場合、コレクション内の一部のエンティティが同じプライマリキーを持っている可能性があります。

    count(*) を出力フィールドとするクエリは、同じプライマリキーを持つエンティティを別々のエンティティとして扱いますが、その他のクエリは、最終的な結果を返す前に同じプライマリキーを持つエンティティを省略します。