概念
DashVector では、コレクション内の複数のパーティションにドキュメントを物理的または論理的にソートできます。[ドキュメントの挿入] や [ドキュメントの検索] など、特定のパーティションでドキュメント関連の操作を実行する場合、操作は指定されたパーティションでのみ実行されます。適切なパーティション設定により、ドキュメントに対する操作の効率を効果的に向上させることができます。
コレクションには複数のパーティションを作成できます。詳細については、「制限」をご参照ください。
各パーティションは一意の名前で識別されます。同じコレクション内のパーティションに同じ名前を付けることはできません。
コレクション内のすべてのパーティションは、ベクトル次元数、ベクトルデータ型、距離メトリック、フィールド定義など、同じスキーマを持ちます。
デフォルトでは、各コレクションには削除できないパーティションが 1 つあります。[ドキュメントの挿入] や ドキュメントの検索 など、ドキュメント関連の操作を実行するときにパーティションを指定しない場合、操作はデフォルトのパーティションで実行されます。
API 操作を呼び出して、パーティションを作成および削除できます。
パーティションの一般的なアプリケーションシナリオ
コレクションでパーティションを使用することにより、クエリのパフォーマンスを大幅に向上させることができます。ただし、一部のシナリオでは、パーティションは推奨されません。データ量が小さい場合、パーティションを使用することは費用対効果が高くありません。データ量が多いものの、パーティションの作成に適したフィールドがない場合は、パーティションを作成することはお勧めしません。たとえば、あまり適切ではないフィールドに基づいてコレクションが複数のパーティションに分割されている場合、検索リクエストで複数のパーティションにわたって多数のクエリが必要になることがあります。この場合、検索パフォーマンスは 1 つのパーティションの場合よりも低くなります。
以下のコンテンツでは、パーティションの使用を推奨する典型的なシナリオについて説明します。
E コマースプラットフォームでの画像による検索
たとえば、越境 E コマースプラットフォームには、2,000 万枚の衣料品画像が含まれています。プラットフォームのビジネス要件は、消費者が画像で製品画像を検索できるようにすることです。製品は、靴、スカート、パンツなど、事前に定義されたカテゴリに分類されます。各カテゴリはパーティションに対応しています。ユーザーが検索リクエストを開始する場合、ユーザーはカテゴリを指定するか、カテゴリモデルを分析して決定させることができます。

ビデオ監視
たとえば、ビデオ監視メーカーは、工業団地内の 1,000 台のカメラで収集されたビデオからフレームを抽出し、車両の機能を識別および抽出し、そのデータを DashVector のベクトルデータベースにインポートして、検索や車両軌跡の生成などの後続のビジネスシナリオに使用できるようにする必要があります。ただし、すべてのデータを 30 日間だけ保持する必要があります。この場合、パーティションは毎日作成され、期限切れになると削除されます。

商標権侵害の検出
たとえば、商標代理店は 5,000 万件の商標のデータベースを持っており、類似の商標を照会して商標権侵害が構成されているかどうかを判断する必要があります。商標は、構造によって、テキスト商標、グラフ商標、数字商標、文字商標など、9 つのカテゴリに分類できます。各カテゴリは DashVector コレクションのパーティションに対応しており、商標データはカテゴリに基づいてパーティションにインポートされます。クエリリクエストを開始するときにパーティションを指定すると、対応するカテゴリの商標が照会されます。
多言語質問応答システム
E コマース企業の国際ナレッジベースチームは、ユーザーが使用する言語に基づいて類似の質問を照会する必要があります。たとえば、チームは、中国語、英語、またはフランス語を使用するユーザーに応答する必要があります。ナレッジベースのコンテンツは、中国語、英語、フランス語に対応する 3 つのパーティションに埋め込まれてインポートされます。次に、クエリの言語に対応するパーティションでクエリが実行されます。
マルチテナントシナリオ
パーティションは、マルチテナントシナリオでも使用できます。たとえば、E コマースサービスプロバイダーは、中小規模の E コマース企業に画像による画像検索機能を提供する必要があります。この場合、サービスプロバイダーは、複数のお客様に対応するために、コレクションに複数のパーティションを作成できます。これにより、データの物理的な分離、セキュリティの確保、コストの削減を実現します。
例
前提条件
クラスターが作成されます。詳細については、「クラスターの作成」をご参照ください。
API キーが取得されます。詳細については、「API キーの管理」をご参照ください。
最新バージョンの SDK がインストールされています。詳細については、「DashVector SDK のインストール」をご参照ください。
サンプルコード
サンプルコードを正しく実行するには、YOUR_API_KEY を API キーに、YOUR_CLUSTER_ENDPOINT をクラスターエンドポイントに置き換える必要があります。
import dashvector
# クライアントを作成します。
client = dashvector.Client(
api_key='YOUR_API_KEY',
endpoint='YOUR_CLUSTER_ENDPOINT'
)
assert client
# コレクションを作成します。
client.create(name='understand_partition', dimension=4)
collection = client.get('understand_partition')
assert collection
# shoes という名前のパーティションを作成します。
collection.create_partition(name='shoes')
# パーティションについて説明します。
ret = collection.describe_partition('shoes')
print(ret)
# パーティションを表示します。
partitions = collection.list_partitions()
print(partitions)
# パーティションにドキュメントを挿入します。
collection.insert(
('1', [0.1,0.1,0.1,0.1]), partition='shoes'
)
# ベクトルベースの類似性検索を実行するときにパーティションを指定します。
docs = collection.query(
vector=[0.1, 0.1, 0.2, 0.1],
partition='shoes'
)
print(docs)
# 指定されたパーティションからドキュメントを削除します。
collection.delete(ids=['1'], partition='shoes')
# パーティション統計を表示します。
ret = collection.stats_partition('shoes')
print(ret)
# パーティションを削除します。
collection.delete_partition('shoes')