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 Kosteneffizienz im großen Maßstab und nicht die niedrigstmögliche Abfragelatenz priorisieren, 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 in der Indexkonfiguration den Parameter shardSize 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. 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 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. Die Vektorsuche wählt dynamisch den geeigneten Maschinentyp aus, um die Leistung zu optimieren.

Nächste Schritte