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.