Optimieren der Speicherkosten in Azure Cosmos DB

GILT FÜR: NoSQL MongoDB Cassandra Gremlin Tabelle

Azure Cosmos DB bietet unbegrenzten Speicher und Durchsatz. Im Gegensatz zum Durchsatz, den Sie für Ihre Azure Cosmos DB-Container oder -Datenbanken konfigurieren bzw. bereitstellen müssen, wird der Speicher nach Verbrauch abgerechnet. Kosten fallen nur für den logischen Speicher an, den Sie nutzen. Sie müssen keinen Speicher im Voraus reservieren. Der Speicher wird auf Grundlage der Daten, die Sie Ihrem Azure Cosmos DB-Container hinzufügen bzw. aus diesem entfernen, automatisch zentral hoch- und herunterskaliert.

Speicherkosten

Speicher wird in der Einheit GB abgerechnet. Von Ihren Daten und der Indizierung wird lokaler SSD-gestützter Speicher verwendet. Der insgesamt genutzte Speicher entspricht dem erforderlichen Speicher für die Daten und Indizes, die in allen Regionen, in denen Sie Azure Cosmos DB nutzen, verwendet werden. Wenn Sie ein Azure Cosmos DB-Konto global über drei Regionen replizieren, zahlen Sie die Gesamtspeicherkosten in jeder der drei Regionen. Mit dem Kapazitätsplanungstool können Sie Ihre Speicheranforderungen schätzen. Die Kosten für Speicher in Azure Cosmos DB betragen 0,25 US-Dollar pro GB und Monat. Die jeweils aktuellen Preise finden Sie unter Preise. Sie können Warnungen einrichten, um den von Ihrem Azure Cosmos DB-Container genutzten Speicher zu bestimmen und Ihren Speicher zu überwachen, wie unter Überwachen von Azure Cosmos DB beschrieben.

Optimieren der Kosten über die Elementgröße

Für eine optimale Leistung und Kostenvorteile erwartet Azure Cosmos DB eine Elementgröße von 2 MB oder kleiner. Wenn Sie ein Datenelement speichern müssen, das größer als 2 MB ist, sollten Sie über eine Umgestaltung des Elementeschemas nachdenken. In den seltenen Fällen, in denen das Schema nicht neu gestaltet werden kann, können Sie das Element in Unterelemente aufteilen und diese mit einem allgemeinen Bezeichner (ID) logisch verknüpfen. Alle Funktionen von Azure Cosmos DB arbeiten einheitlich und verwenden diesen logischen Bezeichner als Anker.

Optimieren der Kosten über die Indizierung

Standardmäßig werden die Daten automatisch indiziert, wodurch sich die Gesamtmenge des genutzten Speichers erhöhen kann. Sie können jedoch benutzerdefinierte Indizierungsrichtlinien verwenden, um diesen zusätzlichen Aufwand zu reduzieren. Eine automatische Indizierung, die nicht über eine Richtlinie optimiert wurde, beträgt etwa 10 bis 20 % der Elementgröße. Durch Entfernen oder Anpassen der Indizierungsrichtlinien brauchen Sie keine Extrakosten für Schreibvorgänge zu bezahlen und benötigen keine zusätzliche Durchsatzkapazität. Das Konfigurieren benutzerdefinierter Indizierungsrichtlinien wird unter Indizierung in Azure Cosmos DB beschrieben. Wenn Sie bereits mit relationalen Datenbanken gearbeitet haben, denken Sie vielleicht, dass „alles indizieren“ eine Verdoppelung des Speichers (oder mehr) bedeutet. In Azure Cosmos DB fällt die Indizierung im Durchschnitt wesentlich weniger ins Gewicht. In Azure Cosmos DB fällt der Speicheraufwand infolge der Indizierung, selbst bei der automatischen Indizierung, in der Regel gering aus (10-20 %), da die Datenbank für einen kleinen „Speicherfußabdruck“ ausgelegt ist. Durch die Verwaltung der Indizierungsrichtlinie können Sie den Kompromiss zwischen Indexfußabdruck und Abfrageleistung in einer noch feiner abgestimmten Weise steuern.

Optimieren der Kosten über Gültigkeitsdauer und Änderungsfeed

Wenn Sie die Daten nicht mehr benötigen, können Sie diese elegant über die Gültigkeitsdauer oder den Änderungsfeed aus Ihrem Azure Cosmos DB-Konto löschen, oder Sie migrieren die alten Daten zu einem anderen Datenspeicher wie Azure Blob Storage oder Azure Data Warehouse. Mit der Gültigkeitsdauer (Time to Live, TTL) bietet Azure Cosmos DB die Möglichkeit, Elemente nach einem bestimmten Zeitraum automatisch aus einem Container zu löschen. Standardmäßig können Sie die Gültigkeitsdauer auf der Containerebene festlegen und den Wert für einzelne Elemente außer Kraft setzen. Wenn Sie eine Gültigkeitsdauer auf Container- oder Elementebene festgelegt haben, werden die betroffenen Elemente nach Ablauf der angegebenen Zeit (seit der letzten Änderung der Elemente) automatisch von Azure Cosmos DB entfernt. Mithilfe des Änderungsfeeds können Sie Daten entweder in einen anderen Container in Azure Cosmos DB oder in einen externen Datenspeicher migrieren. Die Migration verursacht keine Ausfallzeit, und nach der Migration können Sie die Gültigkeitsdauer entweder löschen oder konfigurieren, um den Azure Cosmos DB-Quellcontainer zu löschen.

Optimieren der Kosten mit Rich-Media-Datentypen

Wenn Sie Rich-Media-Datentypen (z. B. Videos, Bilder usw.) speichern möchten, stehen in Azure Cosmos DB eine Reihe von Optionen zur Auswahl. Mit einer dieser Optionen können Sie Rich-Media-Typen als Azure Cosmos DB-Elemente speichern. Pro Element gibt es einen Grenzwert von 2 MB. Sie können diesen Grenzwert umgehen, indem Sie die Datenelemente in mehrere Unterelemente aufteilen und verketten. Oder Sie speichern diese Elemente in Azure Blob Storage und verwenden die Metadaten, um von Ihren Azure Cosmos DB-Elementen darauf zu verweisen. Bei diesem Ansatz gibt es eine Reihe von Vor- und Nachteilen. Beim ersten Ansatz erhalten Sie neben den regulären Azure Cosmos DB-Elementen die beste Leistung im Hinblick auf die Latenz, die besten Durchsatz-SLAs sowie sofort einsatzbereite globale Verteilungsfunktionen für die Rich-Media-Datentypen. Diese Unterstützung bedingt jedoch einen höheren Preis. Indem Sie die Medien in Azure Blob Storage speichern, können Sie Ihre Gesamtkosten senken. Falls die Latenz eine wichtige Rolle spielt, können Sie für die Rich-Media-Dateien, auf die von Azure Cosmos DB-Elementen verwiesen wird, Storage Premium verwenden. Dieser ist nativ in das CDN integriert, um die Images vom Edge-Server zu niedrigeren Kosten bereitzustellen und die geografische Einschränkung zu umgehen. Der Nachteil bei diesem Szenario ist, dass Sie es mit zwei Diensten – Azure Cosmos DB und Azure Blob Storage – zu tun haben, wodurch möglicherweise die Betriebskosten steigen.

Überprüfen der Speichernutzung

Zum Überprüfen der Speichernutzung eines Azure Cosmos DB-Containers können Sie eine HEAD- oder GET-Anforderung für den Container ausführen und die Header x-ms-request-quota und x-ms-request-usage prüfen. Wenn Sie mit dem .NET SDK arbeiten, können Sie alternativ mit den Eigenschaften DocumentSizeQuota und DocumentSizeUsage den genutzten Speicher abrufen.

Verwenden des SDK

// Measure the item size usage (which includes the index size)
ResourceResponse<DocumentCollection> collectionInfo = await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri("db", "coll"));   

Console.WriteLine("Item size quota: {0}, usage: {1}", collectionInfo.DocumentQuota, collectionInfo.DocumentUsage);

Nächste Schritte

Als Nächstes können Sie mithilfe der folgenden Artikel mehr über die Kostenoptimierung in Azure Cosmos DB erfahren: