Speicheroptimierte Vektorsuche

Die speicheroptimierte Leistungsstufe für die Vektorsuche ist für das Indexieren und Durchsuchen großer Datasets konzipiert. Auf dieser Stufe wird eine festplattenbasierte Architektur anstelle von RAM verwendet, wodurch Ihre Betriebskosten erheblich gesenkt werden. Wenn Ihre Priorität auf Kosteneffizienz in großem Maßstab und nicht auf der niedrigstmöglichen Abfragelatenz liegt, ist die speicheroptimierte Stufe die beste Wahl.

Wann sollte ein speicheroptimierter Index verwendet werden?

Verwenden Sie speicheroptimierte Indexe, wenn eine der folgenden Bedingungen zutrifft:

  • Sehr großes Dataset: Sie müssen eine sehr große Anzahl von Vektoren indexieren, und die Kosten für das Hosting einer großen Anzahl von leistungsoptimierten Shards sind zu hoch.

  • Arbeitslast mit niedriger QPS: Bei Anwendungen mit geringem Abfragevolumen können die Kosteneinsparungen durch die Verwendung weniger Shards erheblich sein.

  • Flexible Latenzanforderungen: Ihre Anwendung kann eine geringfügige Erhöhung der Abfragelatenz tolerieren. Die Abfragelatenz ist die Zeit, die benötigt wird, um ein Suchergebnis zu erhalten.

Abwägung von Leistung und Kosten

Im Vergleich zum standardmäßigen leistungsoptimierten Index hat ein speicheroptimierter Index die folgenden Merkmale:

  • Erhöhte Abfragelatenz: Abfragen haben bei einem bestimmten Recall-Level eine etwas höhere Latenz.

Speicheroptimierten Index konfigurieren

Wenn Sie einen Index erstellen möchten der speicheroptimiert ist, legen Sie den shardSize Parameter auf SHARD_SIZE_SO_DYNAMIC in der Indexkonfiguration fest.

Beispiel: Speicheroptimierten Index erstellen

Das folgende Beispiel zeigt das JSON, das zum Erstellen eines neuen speicheroptimierten Streaming-Index erforderlich ist.

{
  "displayName": "my-storage-optimized-index",
  "description": "An index configured to prioritize storage over performance.",
  "metadata": {
    "contentsDeltaUri": "gs://your-bucket/source-data/",
    "config": {
      "dimensions": 100,
      "approximateNeighborsCount": 150,
      "distanceMeasureType": "DOT_PRODUCT_DISTANCE",
      "shardSize": "SHARD_SIZE_SO_DYNAMIC"
    }
  },
  "indexUpdateMethod": "STREAM_UPDATE"
}

Im Beispiel ist shardSize auf SHARD_SIZE_SO_DYNAMIC festgelegt. Dadurch wird die Vektorsuche angewiesen, einen dichteren Index zu erstellen. So kann jeder Shard deutlich mehr Datenpunkte enthalten, wodurch die Gesamtzahl der für Ihr Dataset erforderlichen Shards reduziert wird. Andere Felder wie dimensions und distanceMeasureType werden nach Bedarf konfiguriert.

Endpunkte

Speicheroptimierte Bereitstellungen können mit jedem vorhandenen Endpunkt verwendet werden.

Index bereitstellen

Das folgende Beispiel zeigt das JSON, das zum Bereitstellen eines speicheroptimierten Index auf einem von Ihnen erstellten Endpunkt erforderlich ist.

{
  "deployedIndex": {
    "id": "PROJECT_UNIQUE_ID_NAME",
    "index": "projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID",
    "displayName": "INDEX_DISPLAY_NAME",
    "deploymentTier": "STORAGE"
  }
}

Wenn Sie deploymentTier auf STORAGE festlegen, wird der speicheroptimierte Index mit dem angegebenen displayName auf einem Endpunkt bereitgestellt.

Sie können auch die minimale (minReplicaCount) und maximale (`maxReplicaCount`) Anzahl von Replikaten angeben, um die Anzahl der Maschinenreplikate zu steuern, auf denen die Bereitstellung erfolgen soll.minReplicaCount Das Festlegen des Maschinentyps (machineType) wird nicht unterstützt.

Nächste Schritte