Anforderungseinheiten in Azure Cosmos DB
GILT FÜR: NoSQL MongoDB Cassandra Gremlin Tabelle
Azure Cosmos DB unterstützt viele APIs wie z.B. SQL, MongoDB, Cassandra, Gremlin und Tabelle. Jede API verfügt über einen eigenen Satz von Datenbankvorgängen. Diese Vorgänge reichen von einfachen Lese- und Schreibvorgängen für Datenpunkte bis hin zu komplexen Abfragen. Jeder Datenbankvorgang beansprucht je nach Komplexität eine bestimmte Menge an Systemressourcen.
Azure Cosmos DB normalisiert die Kosten aller Datenbankvorgänge mithilfe von (kurz RU) und misst kosten basierend auf dem Durchsatz (Anforderungseinheiten pro Sekunde, RU/s).
Anforderungseinheiten stellen praktisch die „Währung“ zur Abstrahierung von Systemressourcen wie CPU, IOPS und Arbeitsspeicher dar, die zum Ausführen der von Azure Cosmos DB unterstützten Datenbankvorgänge erforderlich sind. Unabhängig davon, ob es sich bei dem Datenbankvorgang um einen Schreib-, Lese- oder Abfragevorgang handelt, werden die Vorgänge immer in RUs gemessen. Ein Punktlesevorgang (Abrufen eines einzelnen Elements anhand des ID- und Partitionsschlüsselwerts) für ein 1-KB-Element ist beispielsweise eine Anforderungseinheit (oder eine RU), unabhängig davon, welche API Sie für die Interaktion mit Ihrem Azure Cosmos DB-Container verwenden. Sie können Ihre Durchsatzkosten mithilfe des Azure Cosmos DB-Kapazitätsrechners modellieren.
Die folgende Abbildung zeigt eine Übersicht über RUs:
Zur Verwaltung und Planung der Kapazität stellt Azure Cosmos DB sicher, dass die Anzahl von RUs für einen bestimmten Datenbankvorgang und ein bestimmtes Dataset deterministisch ist. Sie können den Antwortheader untersuchen, um die von einem Datenbankvorgang genutzte Anzahl von RUs zu ermitteln. Wenn Sie mit den Faktoren, die sich auf die Gebühren für RUs auswirken, sowie mit den Durchsatzanforderungen Ihrer Anwendung vertraut sind, können Sie Ihre Anwendung kostengünstig ausführen.
Die Art des Azure Cosmos DB-Kontos, das Sie verwenden, bestimmt die Art, auf die verbrauchte RUs in Rechnung gestellt werden. Für die Erstellung eines Kontos gibt es drei Modi:
Modus „Bereitgestellter Durchsatz“: In diesem Modus wird die Anzahl von Anforderungseinheiten (RUs) für Ihre Anwendung auf Sekundenbasis und in Schritten von jeweils 100 RUs pro Sekunde zugewiesen. Um den bereitgestellten Durchsatz für Ihre Anwendung zu skalieren, können Sie die Anzahl der RUs jederzeit in Schritten von 100 RUs erhöhen oder verringern. Sie können Ihre Änderungen entweder programmgesteuert oder über das Azure-Portal vornehmen. Die Anzahl der bereitgestellten RUs pro Sekunde wird auf Stundenbasis abgerechnet. Weitere Informationen finden Sie im Artikel Bereitgestellter Durchsatz.
Durchsatz kann in zwei Granularitäten zugewiesen werden:
- Container: Weitere Informationen finden Sie unter Bereitstellen von Standarddurchsatz (manuell) für einen Azure Cosmos DB-Container: API für NoSQL.
- Datenbanken: Weitere Informationen finden Sie unter Bereitstellen von Standarddurchsatz (manuell) für eine Datenbank in Azure Cosmos DB: API für NoSQL.
Serverloser Modus: In diesem Modus brauchen Sie beim Erstellen von Ressourcen in Ihrem Azure Cosmos DB-Konto keinen Durchsatz zuweisen. Am Ende des Abrechnungszeitraums wird Ihnen die Anzahl der Anforderungseinheiten in Rechnung gestellt, die von den Datenbankvorgängen genutzt wurden. Weitere Informationen finden Sie im Artikel Serverloser Durchsatz.
Modus „Autoskalierung“: In diesem Modus kann der Durchsatz (RU/s) Ihrer Datenbank bzw. Ihres Containers basierend auf der jeweiligen Nutzung automatisch und unmittelbar skaliert werden. Dieser Skalierungsvorgang wirkt sich nicht auf Verfügbarkeit, Wartezeit, Durchsatz oder Leistung der Workload aus. Dieser Modus eignet sich gut für unternehmenskritische Workloads, die über variable oder unvorhersehbare Datenverkehrsmuster verfügen und SLAs für hohe Leistung und Skalierung erfordern. Weitere Informationen finden Sie im Artikel Durchsatz mit Autoskalierung.
Aspekte zu Anforderungseinheiten
Berücksichtigen Sie die folgenden Faktoren, wenn Sie die Anzahl der für Ihre Workload verbrauchen RUs schätzen:
Elementgröße: Je größer ein Element, desto mehr RUs werden beim Lesen oder Schreiben des Elements genutzt.
Elementindizierung: Standardmäßig wird jedes Element automatisch indiziert. Wenn Sie einige Elemente in einem Container nicht indizieren, werden weniger RUs genutzt.
Anzahl der Elementeigenschaften: Bei Verwendung der standardmäßigen Indizierung für alle Eigenschaften erhöht sich die Anzahl von RUs, die beim Schreiben eines Elements genutzt werden, wenn sich die Anzahl von Elementeigenschaften erhöht.
Indizierte Eigenschaften: Eine Indexrichtlinie für jeden Container gibt an, welche Eigenschaften standardmäßig indiziert werden. Zum Verringern der für Schreibvorgänge genutzten RUs begrenzen Sie die Anzahl indizierter Eigenschaften.
Datenkonsistenz: Im Vergleich zu anderen, weniger strengen Konsistenzebenen nutzen die Konsistenzebenen „Stark“ und „Begrenzte Veraltung“ bei Lesevorgängen ungefähr zweimal mehr RUs.
Lesetypen: Punktlesevorgänge kosten weniger RUs als Abfragen.
Abfragemuster: Die Komplexität einer Abfrage wirkt sich darauf aus, wie viele RUs für einen Vorgang verbraucht werden. Faktoren, die die Kosten von Abfragevorgängen beeinflussen:
- Die Anzahl der Abfrageergebnisse
- Die Anzahl der Prädikate
- Die Art der Prädikate
- Die Anzahl der benutzerdefinierten Funktionen
- Die Größe der Quelldaten
- Die Größe des Resultsets
- Projektionen
Die gleiche Abfrage mit den gleichen Daten beansprucht bei wiederholter Ausführung immer die gleiche Anzahl von RUs.
Skriptnutzung: Bei gespeicherten Prozeduren und Triggern hängt die Nutzung von RUs genau wie bei Abfragen von der Komplexität der ausgeführten Vorgänge ab. Sehen Sie sich beim Entwickeln Ihrer Anwendung den Request-Charge-Header an, um zu ermitteln, wie viele RUs der jeweilige Vorgang erfordert.
Anforderungseinheiten und mehrere Regionen
Wenn Sie 'R' RUs in einem Azure Cosmos DB-Container (oder einer Datenbank) zuweisen, stellt Azure Cosmos DB sicher, dass in jeder Region, die mit Ihrem Azure Cosmos DB-Konto verknüpft ist, 'R' RUs verfügbar sind. Sie können RUs nicht selektiv einer bestimmten Region zuweisen. Die in einem Azure Cosmos DB-Container (oder einer Datenbank) bereitgestellten RUs werden in allen mit Ihrem Azure Cosmos DB-Konto verbundenen Regionen bereitgestellt.
Angenommen, ein Azure Cosmos DB-Container ist mit R RUs konfiguriert, und es gibt N Regionen, die dem Azure Cosmos DB-Konto zugeordnet sind, dann beträgt die Gesamtzahl von im Container verfügbaren RUs = R x N.
Die Wahl des Konsistenzmodells wirkt sich auch auf den Durchsatz aus. Für die entspannteren Konsistenzebenen (Sitzung, *Präfixkonsistenz und letztliche Konsistenz) können Sie den etwa zweifachen Lesedurchsatz im Vergleich zu stärkeren Konsistenzebenen (begrenzte Veraltung oder starke Konsistenz) erzielen.