Speicheroptimierte Vektorsuche

Die speicheroptimierte Leistungsklasse für die Vektorsuche ist für die Indexierung und Suche in riesigen Datasets konzipiert. In dieser Stufe wird eine festplattenbasierte Architektur anstelle von RAM verwendet, wodurch Ihre Betriebskosten erheblich gesenkt werden. Wenn Sie Wert auf Kosteneffizienz legen und nicht auf die niedrigstmögliche Abfragelatenz, ist die speicheroptimierte Stufe die beste Wahl.

Wann sollte ein speicheroptimierter Index verwendet werden?

Sie sollten speicheroptimierte Indexe in Betracht ziehen, wenn einer der folgenden Fälle zutrifft:

  • Sehr großes Dataset: Sie müssen eine sehr große Anzahl von Vektoren indexieren und die Kosten für das Hosten 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. Das ist die Zeit, die benötigt wird, um ein Suchergebnis zu erhalten.

Kompromisse bei der Leistung

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

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

Speicheroptimierten Index konfigurieren

Wenn Sie einen speicheroptimierten Index erstellen möchten, legen Sie den Parameter shardSize in Ihrer Indexkonfiguration auf SHARD_SIZE_SO_DYNAMIC fest.

Beispiel: Speicheroptimierten Index erstellen

Das folgende Beispiel zeigt das JSON, das zum Erstellen eines neuen speicheroptimierten Streamingindex 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 gesetzt, wodurch die Vektorsuche angewiesen wird, einen dichteren Index zu erstellen. So kann jeder Shard deutlich mehr Datenpunkte enthalten, wodurch die Gesamtzahl der für Ihren Datensatz 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 für einen 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 (minReplicaCount) Anzahl von Replikaten angeben, um die Anzahl der Maschinenreplikate zu steuern, auf denen bereitgestellt werden soll. Das Festlegen des Maschinentyps (machineType) wird nicht unterstützt.

Nächste Schritte