Strategien mit mehreren Mandanten
In vielen Anwendungsfällen möchten Entwickler einen Milvus-Cluster betreiben und mehrere Mandanten bedienen, z. B. mehrere Produktteams oder Millionen von Endbenutzern. In diesem Leitfaden werden einige verschiedene Strategien zur Erreichung von Mandantenfähigkeit auf Milvus erläutert.
Milvus ist so konzipiert, dass es Multi-Tenancy auf Datenbank-, Sammel- oder Partitionsebene unterstützt. Das Ziel der Mandantenfähigkeit ist es, die Daten und Ressourcen voneinander zu trennen. Die Implementierung von Mandantenfähigkeit auf verschiedenen Ebenen kann ein unterschiedliches Ausmaß an Isolation erreichen, ist aber auch mit unterschiedlichem Overhead verbunden. Im Folgenden werden die Kompromisse zwischen diesen Ebenen erläutert.
Datenbankorientierte Mehrmandantenfähigkeit
Seit der Milvus-Version 2.2.9 können Sie mehrere Datenbanken in einem einzigen Milvus-Cluster erstellen. Diese Funktion ermöglicht eine datenbankorientierte Mandantenfähigkeit, indem jedem Mandanten eine Datenbank zugewiesen wird, so dass er seine eigenen Sammlungen erstellen kann. Dieser Ansatz bietet die beste Daten- und Ressourcenisolierung für Mandanten, ist aber auf maximal 64 Datenbanken in einem Cluster beschränkt.
Sammlungsorientierte Mehrmandantenfähigkeit
Es gibt zwei Möglichkeiten, um eine sammlungsorientierte Mandantenfähigkeit zu erreichen.
Eine Sammlung für alle Tenants
Die Verwendung einer einzigen Sammlung zur Implementierung der Mandantenfähigkeit durch Hinzufügen eines Mandantenfeldes zur Unterscheidung zwischen den Mandanten ist eine einfache Option. Fügen Sie bei der ANN-Suche nach einem bestimmten Tenant einen Filterausdruck hinzu, um alle Entitäten herauszufiltern, die zu anderen Tenants gehören. Dies ist der einfachste Weg, um Multi-Tenancy zu erreichen. Beachten Sie jedoch, dass die Leistung des Filters zum Flaschenhals der ANN-Suche werden kann. Um die Suchleistung zu verbessern, können Sie mit der folgenden partitionierten Mandantenfähigkeit optimieren.
Eine Sammlung pro Mandant
Ein anderer Ansatz besteht darin, eine Sammlung für jeden Mandanten zu erstellen, um seine eigenen Daten zu speichern, anstatt die Daten aller Mandanten in einer einzigen Sammlung zu speichern. Dies bietet eine bessere Datenisolierung und Abfrageleistung. Beachten Sie jedoch, dass dieser Ansatz mehr Ressourcen bei der Planung erfordert und auf maximal 10.000 Sammlungen in einem Cluster beschränkt ist.
Partitionsorientierte Multi-Tenancy
Es gibt zwei Möglichkeiten, partitionierte Mandantenfähigkeit zu erreichen:
Eine Partition pro Mandant
Die Verwaltung einer einzigen Sammlung ist viel einfacher als die Verwaltung mehrerer Sammlungen. Anstatt mehrere Sammlungen zu erstellen, können Sie jedem Mandanten eine Partition zuweisen, um eine flexible Datenisolierung und Speicherverwaltung zu erreichen. Die Suchleistung der partitionorientierten Mandantenfähigkeit ist wesentlich besser als die der sammlungsorientierten Mandantenfähigkeit. Beachten Sie jedoch, dass die Anzahl der Mandanten der Sammlung die maximale Anzahl von Partitionen, die eine Sammlung enthalten kann, nicht überschreiten sollte.
Partitionsschlüssel-basierte Mandantenfähigkeit
Milvus 2.2.9 führt eine neue Funktion namens Partitionsschlüssel ein. Bei der Erstellung einer Sammlung kann ein Mandantenfeld als Partitionsschlüsselfeld festgelegt werden. Milvus speichert Entitäten in einer Partition entsprechend dem Hash-Wert des Partitionsschlüsselfeldes. Bei der Durchführung von ANN-Suchen durchsucht Milvus nur die Partition, die den Partitionsschlüssel enthält. Dadurch wird der Umfang der Suche weitgehend reduziert und eine bessere Leistung erzielt als ohne Partitionsschlüssel.