マルチテナント戦略
多くのユースケースにおいて、開発者は1つのMilvusクラスタを運用し、数人の製品チームや数百万人のエンドユーザなど、複数のテナントにサービスを提供したいと考えています。このガイドでは、Milvusでマルチテナントを実現するためのいくつかの戦略について説明します。
Milvusはデータベース、コレクション、またはパーティションレベルでマルチテナンシーをサポートするように設計されています。マルチテナントの目的は、データとリソースを互いに分離することです。異なるレベルでマルチテナンシーを実装することにより、異なる分離の程度を達成することができますが、異なるオーバーヘッドも伴います。ここではそのトレードオフについて説明する。
データベース指向マルチテナンシー
Milvusバージョン2.2.9以降、1つのMilvusクラスタに複数のデータベースを作成することができるようになりました。この機能により、テナントごとにデータベースを割り当て、テナントごとにコレクションを作成することで、データベース指向のマルチテナントを実現することができます。このアプローチはテナントにとって最適なデータとリソースの分離を提供しますが、1クラスタに最大64データベースまでという制限があります。
コレクション指向のマルチテナント
コレクション指向のマルチテナントを実現するには2つの方法が考えられます。
すべてのテナントに1つのコレクション
テナントを区別するためにテナント・フィールドを追加することで、単一のコレクションを使用してマルチテナントを実装するのは簡単なオプションです。特定のテナントに対してANN検索を行う場合、フィルタ式を追加して、他のテナントに属するすべてのエンティティをフィルタリングします。これは、マルチテナントを実現する最も簡単な方法です。ただし、フィルタのパフォーマンスがANN検索のボトルネックになる可能性があることに注意してください。検索パフォーマンスを向上させるには、以下のパーティション指向のマルチテナントで最適化できます。
テナントごとに1つのコレクション
すべてのテナントのデータを1つのコレクションに格納するのではなく、テナントごとにコレクションを作成してデータを格納する方法もあります。これにより、データの分離とクエリのパフォーマンスが向上します。ただし、このアプローチはスケジューリングに多くのリソースを必要とし、クラスタ内のコレクション数は最大でも10,000に制限されることに留意してください。
パーティション指向のマルチテナント
パーティション指向のマルチテナンシーを実現するには2つの方法があります:
テナントごとに1つのパーティション
1つのコレクションを管理するのは、複数のコレクションを管理するよりもはるかに簡単です。複数のコレクションを作成する代わりに、テナントごとにパーティションを割り当てて、柔軟なデータ分離とメモリ管理を実現することを検討してください。パーティション指向のマルチテナントの検索パフォーマンスは、コレクション指向のマルチテナントよりもはるかに優れています。ただし、コレクションのテナントの数は、コレクションが保持できるパーティションの最大数を超えてはならないことに注意してください。
パーティションキーベースのマルチテナンシー
Milvus 2.2.9では、パーティションキーという新機能が導入されました。コレクションの作成時に、テナントフィールドを指定し、それをパーティションキーフィールドにします。Milvusはパーティションキーフィールドのハッシュ値に従って、パーティションにエンティティを格納する。ANN検索を行う際、Milvusはパーティションキーを含むパーティションのみを検索する。これにより、検索範囲が大幅に縮小されるため、パーティション・キーがない場合よりもパフォーマンスが向上する。