Verstehen Sie die Echtzeit-Datenbankabrechnung

Firebase stellt die Daten, die Sie in Ihrer Datenbank speichern, und den gesamten ausgehenden Netzwerkverkehr auf der Sitzungsschicht (Schicht 5) des OSI-Modells in Rechnung. Der Speicherplatz wird mit 5 $ pro GB/Monat berechnet und täglich berechnet. Der Standort Ihrer Datenbank hat keinen Einfluss auf die Abrechnung. Ausgehender Datenverkehr umfasst Verbindungs- und Verschlüsselungsaufwand für alle Datenbankvorgänge und Daten, die durch Datenbanklesevorgänge heruntergeladen werden. Sowohl das Lesen als auch das Schreiben von Datenbanken kann zu Verbindungskosten auf Ihrer Rechnung führen. Der gesamte Datenverkehr zu und von Ihrer Datenbank, einschließlich der durch Sicherheitsregeln verweigerten Vorgänge, führt zu abrechenbaren Kosten.

Einige gängige Beispiele für abgerechneten Datenverkehr sind:

  • Heruntergeladene Daten: Wenn Clients Daten aus Ihrer Datenbank erhalten, erhebt Firebase Gebühren für die heruntergeladenen Daten. Normalerweise macht dies den Großteil Ihrer Bandbreitenkosten aus, aber es ist nicht der einzige Faktor in Ihrer Rechnung.
  • Protokoll-Overhead: Zum Aufbau und zur Aufrechterhaltung einer Sitzung ist etwas zusätzlicher Datenverkehr zwischen dem Server und den Clients erforderlich. Abhängig vom zugrunde liegenden Protokoll kann dieser Datenverkehr Folgendes umfassen: Echtzeitprotokoll-Overhead der Firebase Realtime Database, WebSocket-Overhead und HTTP-Header-Overhead. Jedes Mal, wenn eine Verbindung hergestellt wird, trägt dieser Overhead zusammen mit dem Overhead der SSL-Verschlüsselung zu den Verbindungskosten bei. Obwohl dies nicht viel Bandbreite für eine einzelne Anfrage ist, kann sie einen erheblichen Teil Ihrer Rechnung ausmachen, wenn Ihre Nutzlast gering ist oder Sie häufige, kurze Verbindungen herstellen.
  • SSL-Verschlüsselungsaufwand: Der für sichere Verbindungen erforderliche SSL-Verschlüsselungsaufwand ist mit Kosten verbunden. Im Durchschnitt betragen diese Kosten etwa 3,5 KB für den ersten Handshake und etwa zehn Bytes für die TLS-Datensatz-Header jeder ausgehenden Nachricht. Bei den meisten Apps ist dies ein kleiner Prozentsatz Ihrer Rechnung. Dies kann jedoch ein großer Prozentsatz sein, wenn in Ihrem speziellen Fall viele SSL-Handshakes erforderlich sind. Beispielsweise könnten Geräte, die keine TLS-Sitzungstickets unterstützen, eine große Anzahl von SSL-Verbindungs-Handshakes erfordern.
  • Firebase-Konsolendaten: Obwohl dies normalerweise keinen wesentlichen Teil der Echtzeitdatenbankkosten ausmacht, berechnet Firebase Gebühren für Daten, die Sie von der Firebase-Konsole lesen und schreiben.

Schätzen Sie Ihren abgerechneten Verbrauch

Um Ihre aktuellen Echtzeitdatenbankverbindungen und Datennutzung anzuzeigen, überprüfen Sie die Registerkarte „Nutzung“ in der Firebase-Konsole. Sie können die Nutzung im aktuellen Abrechnungszeitraum, in den letzten 30 Tagen oder in den letzten 24 Stunden überprüfen.

Firebase zeigt Nutzungsstatistiken für die folgenden Metriken an:

  • Verbindungen: Die Anzahl gleichzeitiger, aktuell geöffneter Echtzeitverbindungen zu Ihrer Datenbank. Dazu gehören die folgenden Echtzeitverbindungen: WebSocket, lange Abfragen und vom HTML-Server gesendete Ereignisse. Es umfasst keine RESTful-Anfragen.
  • Speicher: Wie viele Daten in Ihrer Datenbank gespeichert sind. Dies gilt nicht für Firebase-Hosting oder Daten, die über andere Firebase-Produkte gespeichert werden.
  • Downloads: Alle aus Ihrer Datenbank heruntergeladenen Bytes, einschließlich Protokoll- und Verschlüsselungsaufwand.
  • Auslastung: Dieses Diagramm zeigt, wie viel von Ihrer Datenbank in einem bestimmten 1-Minuten-Intervall verwendet wird und Anforderungen verarbeitet. Möglicherweise treten Leistungsprobleme auf, wenn sich Ihre Datenbank 100 % nähert.

Optimieren Sie die Nutzung

Es gibt einige Best Practices, mit denen Sie Ihre Datenbanknutzung und Bandbreitenkosten optimieren können.

  • Verwenden Sie die nativen SDKs: Verwenden Sie nach Möglichkeit die SDKs, die der Plattform Ihrer App entsprechen, anstelle der REST-API. Die SDKs halten offene Verbindungen aufrecht und reduzieren so die SSL-Verschlüsselungskosten, die normalerweise mit der REST-API anfallen.
  • Auf Fehler prüfen: Wenn Ihre Bandbreitenkosten unerwartet hoch sind, stellen Sie sicher, dass Ihre App nicht mehr Daten oder häufiger synchronisiert als ursprünglich beabsichtigt. Um Probleme zu lokalisieren, verwenden Sie das Profiler-Tool , um Ihre Lesevorgänge zu messen und die Debug-Protokollierung in den Android- , Objective-C- und Web- SDKs zu aktivieren. Überprüfen Sie die Hintergrund- und Synchronisierungsprozesse in Ihrer App, um sicherzustellen, dass alles wie gewünscht funktioniert.
  • Verbindungen reduzieren: Versuchen Sie nach Möglichkeit, die Bandbreite Ihrer Verbindung zu optimieren. Häufige, kleine REST-Anfragen können teurer sein als eine einzelne, kontinuierliche Verbindung mit dem nativen SDK. Wenn Sie die REST-API verwenden, sollten Sie die Verwendung eines HTTP-Keep-Alive oder vom Server gesendeter Ereignisse in Betracht ziehen, um die Kosten für SSL-Handshakes zu senken.
  • Verwenden Sie TLS-Sitzungstickets: Reduzieren Sie die Overhead-Kosten für die SSL-Verschlüsselung bei wiederaufgenommenen Verbindungen, indem Sie TLS-Sitzungstickets ausstellen. Dies ist besonders hilfreich, wenn Sie häufige, sichere Verbindungen zur Datenbank benötigen.
  • Indexabfragen: Die Indizierung Ihrer Daten reduziert die Gesamtbandbreite, die Sie für Abfragen verwenden, was den doppelten Vorteil hat, dass Ihre Kosten gesenkt und die Leistung Ihrer Datenbank erhöht wird. Verwenden Sie das Profiler-Tool, um nicht indizierte Abfragen in Ihrer Datenbank zu finden .
  • Optimieren Sie Ihre Listener: Fügen Sie Abfragen hinzu, um die Daten zu begrenzen, die Ihre Listen-Vorgänge zurückgeben, und verwenden Sie Listener, die nur Datenaktualisierungen herunterladen – zum Beispiel on() statt once() . Platzieren Sie Ihre Zuhörer außerdem so weit unten wie möglich im Pfad, um die Datenmenge zu begrenzen, die sie synchronisieren.
  • Reduzieren Sie Speicherkosten: Führen Sie regelmäßige Bereinigungsjobs durch und reduzieren Sie doppelte Daten in Ihrer Datenbank.
  • Nutzungsregeln: Verhindern Sie potenziell kostspielige, nicht autorisierte Vorgänge in Ihrer Datenbank. Durch die Verwendung von Firebase Realtime Database Security Rules könnte beispielsweise ein Szenario vermieden werden, in dem ein böswilliger Benutzer wiederholt Ihre gesamte Datenbank herunterlädt. Erfahren Sie mehr über die Verwendung von Firebase-Echtzeitdatenbankregeln .

Der beste Optimierungsplan für Ihre App hängt von Ihrem speziellen Anwendungsfall ab. Auch wenn dies keine erschöpfende Liste der Best Practices ist, finden Sie weitere Ratschläge und Tipps von den Firebase-Experten auf unserem Slack-Kanal oder auf Stack Overflow .