2017-02-02 1 views
1

Es ist ein known issue, dass Firebase keine einfache Möglichkeit zum Zählen von Elementen hat. Ich plane, eine App zu erstellen, die stark auf Zählungen und anderen Aggregaten beruht. Ich fürchte, die Zähler dieser App mit den Regeln zu erstellen, da die vorgeschlagene Version here unglaublich komplex und schwer zu warten ist. SoFirebase Control Server zur Wartung von Zählern und Aggregaten

dachte ich über dieses Muster:

Ich werde einen Server halten, die in der Datenbank und dieser Server alle Zähler und Aggregate aktualisieren eingegeben auf alle Elemente hören. Der Server enthält die UID eines speziellen Administrators, der nur die Zähler aktualisieren kann.

Auf diese Weise müssen Benutzer nicht ganze Knoten herunterladen, um eine Zählung zu erhalten, und ich muss nicht mit Problemen umgehen, die aus der Wartung von Leistungsindikatoren durch Clients entstehen.

Macht dieses Muster Sinn? Fehle ich etwas?

Antwort

1

Firebase hat kürzlich Cloud-Funktionen veröffentlicht. Wie auf der documentation erwähnt:

Cloud-Funktionen ist eine gehostete, private und skalierbare Node.js Umgebung wo Sie JavaScript-Code ausführen können.

Mit Cloud-Funktionen müssen Sie keinen eigenen Server erstellen. Sie können einfach JavaScript-Funktionen schreiben und sie in Firebase hochladen. Firebase ist verantwortlich für die Auslösung von Funktionen, wenn ein Ereignis eintritt.

Angenommen, Sie möchten die Anzahl der Likes in einem Beitrag zählen. Sie sollten eine Struktur ähnlich wie diese haben:

{ 
    "Posts" : { 
    "randomKey" : { 
     "likes_count":5, 
     "likes" : { 
     "userX" : true, 
     "userY" : true, 
     "userZ" : true, 
     ... 
    } 
    } 
    } 
} 

Und Ihre JavaScript-Funktion wie folgt geschrieben werden würde:

const functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 

// Keeps track of the length of the 'likes' child list in a separate attribute. 
exports.countlikes = functions.database.ref('/posts/$postid/likes').onWrite(event => { 
    return event.data.ref.parent().child('likes_count').set(event.data.numChildren()); 
}); 

Dieser Code erhöht die likes_count Variable jedes Mal ein neues Schreib auf dem likes ist Knoten.

Dieses Beispiel ist verfügbar unter GitHub.

Verwandte Themen