メインコンテンツまでスキップ
バージョン: User Guides (Cloud)

エンティティ数のカウント

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

概要

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

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

    コレクション内の正確なエンティティ数を取得するには、この方法を使用し、以下の条件を満たす必要があります。

    • 対象のコレクションがロード済みであること。
    • クエリリクエストで consistency_levelStrong に設定すること。
    • output_field['count(*)'] に設定すること。

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

    複数のパーティション名をクエリ内で指定することで、それらのパーティションごとのエンティティ数を取得できます。詳細については、「Query with count(*) as the output field」を参照してください。

  • get_collection_stats() の使用

    上記の方法でコレクションの正確なエンティティ数を取得できますが、すべての場面でこの方法を使用することは推奨されません。この処理は基本的にクエリであり、頻繁に呼び出すとネットワークの不安定化や、ビジネスに関連する検索・クエリへの影響を引き起こす可能性があります。

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

    なお、すべてのデータ操作は非同期で実行されるため、内部トラッカーがエンティティ数をリアルタイムで反映できない点にご注意ください。詳細については、「Use get_collection_stats()」を参照してください。

📘Notes

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

プログラムによるエンティティ数の取得に加えて、Zilliz Cloud コンソール上でクラスター、コレクション、またはパーティションごとのエンティティ数を確認することもできます。詳細については、「Entity counts on the Zilliz Cloud console」をご覧ください。

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

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

# 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 という名前のコレクションがすでに存在しているものと仮定しています。

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 コンソールにアクセスして、クラスター、コレクション、またはパーティションのエンティティ数を以下のページで確認することもできます。

メトリクス

クラスターの メトリクス タブで、エンティティ数 および ロードされたエンティティ (Approx.) を確認できます。どちらの値も推定値です。グラフ内の値は、こちらで説明されているget_collection_stats() を使用して取得されます。これ以降データの挿入や削除が行われない場合、エンティティ数 のグラフは最終的に現在のコレクション内の実際のエンティティ数を反映します。

UGT3bXxnjordXpxhTZUcMYK6nQg

コレクションの詳細

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

L8ImbqFLIonMTxx47WBcF5IbnTf

パーティション

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

Y4Etb0AITotVQNxvzs4cZCHsn9d

よくある質問

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

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

  • コレクションのメトリクスタブにある エンティティ数 のグラフが、エンティティを挿入または削除した後も変化しないのはなぜですか?

    エンティティ数 グラフの値は特定の時点での推定値です。すべてのデータ操作は非同期で実行されるため、グラフに反映されるまでに遅延が生じる可能性があります。

  • コレクションの パーティション タブにある エンティティ数 (Approx.) 列の値が、エンティティを挿入または削除した後も変化しないのはなぜですか?

    表示されているパーティションの値はすべて推定値です。すべてのデータ操作は非同期で実行されるため、グラフに反映されるまでに遅延が生じる可能性があります。

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

    ロードされたエンティティ に表示される値は正確です。この値と通常のクエリで取得されるエンティティ数との間にギャップがある場合、コレクション内に重複する主キーを持つエンティティが存在する可能性があります。

    count(*) を出力フィールドとするクエリは、主キーが同一のエンティティを別々のエンティティとして扱いますが、他のクエリでは同じ主キーを持つエンティティを最終結果を返す前に除外します。