Firebase stellt die Daten, die Sie in Ihrer Datenbank speichern, und den gesamten ausgehenden Netzwerkverkehr auf der Sitzungsebene (Ebene 5) des OSI-Modells in Rechnung. Speicher wird mit 5 $ pro GB/Monat abgerechnet und täglich ausgewertet. Die Abrechnung wird nicht durch den Standort Ihrer Datenbank beeinflusst. Ausgehender Datenverkehr umfasst Verbindungs- und Verschlüsselungs-Overhead von allen Datenbankoperationen und Daten, die durch Datenbanklesevorgänge heruntergeladen werden. Sowohl das Lesen als auch das Schreiben der Datenbank können zu Verbindungskosten auf Ihrer Rechnung führen. Der gesamte Datenverkehr zu und von Ihrer Datenbank, einschließlich Operationen, die durch Sicherheitsregeln verweigert werden, führt zu abrechenbaren Kosten.
Einige gängige Beispiele für abgerechneten Traffic sind:
- Heruntergeladene Daten: Wenn Clients Daten aus Ihrer Datenbank abrufen, berechnet Firebase die heruntergeladenen Daten. Normalerweise macht dies den Großteil Ihrer Bandbreitenkosten aus, aber es ist nicht der einzige Faktor in Ihrer Rechnung.
- Protokoll-Overhead: Etwas zusätzlicher Datenverkehr zwischen dem Server und den Clients ist erforderlich, um eine Sitzung aufzubauen und aufrechtzuerhalten. 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 es einen erheblichen Teil Ihrer Rechnung ausmachen, wenn Ihre Payloads winzig sind oder Sie häufige, kurze Verbindungen herstellen.
- SSL-Verschlüsselungs-Overhead: Der für sichere Verbindungen erforderliche SSL-Verschlüsselungs-Overhead ist mit Kosten verbunden. Im Durchschnitt betragen diese Kosten ungefähr 3,5 KB für den anfänglichen Handshake und ungefähr zehn Bytes für TLS-Eintragsheader in jeder ausgehenden Nachricht. Bei den meisten Apps ist dies ein kleiner Prozentsatz Ihrer Rechnung. Dies kann jedoch ein großer Prozentsatz werden, wenn Ihr spezieller Fall viele SSL-Handshakes erfordert. Beispielsweise erfordern Geräte, die TLS-Sitzungstickets nicht unterstützen, möglicherweise eine große Anzahl von SSL-Verbindungshandshakes.
- Firebase-Konsolendaten: Obwohl dies normalerweise kein erheblicher Teil der Kosten für die Echtzeitdatenbank ist, berechnet Firebase Gebühren für Daten, die Sie über die Firebase-Konsole lesen und schreiben.
Schätzen Sie Ihre abgerechnete Nutzung
Um Ihre aktuellen Echtzeitdatenbankverbindungen und Datennutzung anzuzeigen, überprüfen Sie die Registerkarte „Nutzung“ in der Firebase-Konsole. Sie können die Nutzung über den aktuellen Abrechnungszeitraum, die letzten 30 Tage oder die letzten 24 Stunden überprüfen.
Firebase zeigt Nutzungsstatistiken für die folgenden Messwerte an:
- Verbindungen: Die Anzahl der gleichzeitig geöffneten Echtzeitverbindungen zu Ihrer Datenbank. Dazu gehören die folgenden Echtzeitverbindungen: WebSocket, Long Polling und vom HTML-Server gesendete Ereignisse. RESTful-Anforderungen sind nicht enthalten.
- Speicher: Wie viele Daten werden in Ihrer Datenbank gespeichert. 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üsselungs-Overhead.
- Auslastung: Dieses Diagramm zeigt, wie viel 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.
Nutzung optimieren
Es gibt einige Best Practices, die Sie anwenden können, um Ihre Datenbanknutzung und Bandbreitenkosten zu optimieren.
- 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 die SSL-Verschlüsselungskosten, die sich normalerweise bei der REST-API summieren.
- Auf Fehler prüfen: Wenn Ihre Bandbreitenkosten unerwartet hoch sind, vergewissern Sie sich, dass Ihre App nicht mehr Daten oder häufiger als ursprünglich beabsichtigt synchronisiert. Um Probleme zu lokalisieren, verwenden Sie das Profiler-Tool , um Ihre Lesevorgänge zu messen, und aktivieren Sie die Debug-Protokollierung in den Android- , Objective-C- und Web- SDKs. Überprüfen Sie Hintergrund- und Synchronisierungsprozesse in Ihrer App, um sicherzustellen, dass alles wie beabsichtigt funktioniert.
- Verbindungen reduzieren: Versuchen Sie, wenn möglich, Ihre Verbindungsbandbreite zu optimieren. Häufige, kleine REST-Anforderungen können kostspieliger sein als eine einzelne, kontinuierliche Verbindung mit dem nativen SDK. Wenn Sie die REST-API verwenden, sollten Sie die Verwendung von HTTP-Keepalive- oder vom Server gesendeten Ereignissen in Betracht ziehen, wodurch die Kosten für SSL-Handshakes gesenkt werden können.
- 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äufig sichere Verbindungen zur Datenbank benötigen.
- Indexabfragen: Das Indizieren Ihrer Daten reduziert die Gesamtbandbreite, die Sie für Abfragen verwenden, was den doppelten Vorteil hat, dass Sie Ihre Kosten senken und die Leistung Ihrer Datenbank steigern. 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-Operationen zurückgeben, und verwenden Sie Listener, die nur Aktualisierungen von Daten herunterladen – zum Beispiel
on()
stattonce()
. Platzieren Sie Ihre Zuhörer außerdem so weit unten im Pfad wie möglich, um die Datenmenge zu begrenzen, die sie synchronisieren. - Reduzieren Sie die Speicherkosten: Führen Sie regelmäßige Bereinigungsjobs aus und reduzieren Sie doppelte Daten in Ihrer Datenbank.
- Verwenden Sie Regeln: Verhindern Sie potenziell kostspielige, nicht autorisierte Operationen an 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. Obwohl dies keine vollständige Liste bewährter Verfahren ist, finden Sie weitere Ratschläge und Tipps von den Firebase-Experten in unserem Slack-Kanal oder auf Stack Overflow .