Mehrmandantenstrategien
Da ChatGPT immer beliebter wird, erstellen immer mehr Entwickler ihre eigenen SaaS-Dienste unter Verwendung des CVP-Stacks (ChatGPT, Vector Database, Prompt). In diesem Leitfaden wird erklärt, wie man Multi-Tenancy auf Milvus, einer der weltweit am häufigsten verwendeten Vektordatenbanken, erreichen kann, um mit diesem Trend Schritt zu halten.
Multi-Tenancy ist eine Architektur, bei der eine einzige Milvus-Instanz mehrere Mandanten bedient. Die einfachste Möglichkeit, Mandanten zu unterscheiden, besteht darin, ihre Daten und Ressourcen von denen anderer zu trennen. Jeder Tenant hat seine eigenen dedizierten Ressourcen oder teilt sich Ressourcen mit anderen, um Milvus-Objekte wie Datenbanken, Sammlungen und Partitionen zu verwalten. Basierend auf diesen Objekten gibt es entsprechende Methoden, um Milvus-Multi-Tenancy zu erreichen.
Datenbankorientierte Mandantenfähigkeit
Seit Milvus Version 2.2.9 ist die Objektdatenbank nun verfügbar. Sie können mehrere Datenbanken in einem einzigen Milvus-Cluster erstellen. Diese neue Funktion ermöglicht eine datenbankorientierte Mandantenfähigkeit, indem jedem Mandanten eine Datenbank zugewiesen wird, so dass er seine eigenen Sammlungen und Partitionen erstellen kann, um das Beste aus seinen Daten herauszuholen. Diese Strategie gewährleistet zwar die Datenisolierung und die Suchleistung für die Mandanten, aber es kann zu einer Verschwendung von Ressourcen für untätige Mandanten kommen.
Sammlungsorientierte Multi-Tenancy
Es gibt zwei Möglichkeiten, um eine sammlungsorientierte Mandantenfähigkeit zu erreichen.
Eine Sammlung für alle Tenants
Die Verwendung einer einzigen Sammlung zur Umsetzung 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.
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 Investitionen in die Ressourcenplanung, die Betriebsfähigkeit und die Kosten erfordert und möglicherweise nicht anwendbar ist, wenn die Anzahl der Mandanten die maximale Anzahl von Sammlungen, die ein einzelner Milvus-Cluster unterstützt, überschreitet.
Partitionsorientierte Multi-Mandantenschaft
Es gibt auch zwei Möglichkeiten, um eine 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 den Werten im Partitionsschlüsselfeld. Bei der Durchführung von ANN-Suchen wechselt Milvus zu einer Partition, die auf dem angegebenen Partitionsschlüssel basiert, filtert Entitäten gemäß dem Partitionsschlüssel und sucht unter den gefilterten Entitäten.