2017-02-23 11 views
1

Ich weiß, es ist ein viel diskutiertes Thema, aber für mich ist es immer noch nicht klar, welche der beste Ansatz ist, um erweiterte Abfragen in Firebase zu erstellen.Firebase erweiterte Abfragen

Derzeit verwende ich Angular 2 im Frontend und Firebase + NodeJS (Admin SDK) im Backend auf einer App-Engine.

Frontend: Auth/Einfache Abfragen/Schreiben nicht sensible Daten

NodeJS: Schreiben hoch sensible Daten/Validierung

Works völlig in Ordnung!

Aber jetzt will ich erweiterte Abfragen erstellen und hier, wo ich kämpfen:

  • Firebase gebaut ist in Abfrage sind nicht stark genug, um
  • Client-Seite aus Leistungsgründen zu schlecht wäre.
  • Gleiches für Serverseite. Ich müsste alle nicht erfassten Daten sowieso auf meinen Server übertragen.

Also gibt es einen guten Ansatz, um Übertragung unerlaubt Daten zu vermeiden? Vielleicht, da ich die gcloud sowieso für den admin sdk benutze?

Ich vermisse wirklich etwas wie benutzerdefinierte Endpunkte.

THX im Voraus!

+0

Weg zu vage eine Frage. Ihre Definition von "erweiterte Abfrage" und meine könnte sehr unterschiedlich sein. Bitte geben Sie ein konkretes Beispiel an, zeigen Sie etwas Code und Ihre Firebase-Struktur. Überprüfen Sie auch [Wie Sie fragen] (http://stackoverflow.com/help/how-to-ask). Aktualisieren Sie Ihre Frage und wir versuchen zu helfen! – Jay

Antwort

3

Googles Antwort auf "Warum können Sie keine erweiterten Abfragen durchführen?" ist einfach "Restrukturieren Sie Ihre Daten, so dass Sie keine erweiterten Abfragen benötigen"

Dies mag wie eine billige Ausschneide erscheinen, aber die Idee ist, da Firebase angeblich Echtzeit ist, muss es Daten abfragen als so schnell wie möglich, und es könnte nicht genug Zeit/Ressourcen geben, um erweiterte Abfragen auszuführen. Dies ist aus der Sicht von Google sinnvoll, da sie nicht einfach mehr Serverressourcen bereitstellen können, die nur für Sie verfügbar sind. Bei Google ist es einfach: "Wir stellen Ihnen alle Daten zur Verfügung, wenn Sie sie brauchen, es ist Ihre Aufgabe, sie konsistent zu machen und alles zu tun, was Sie wollen."

Aus diesem Grund muss Ihr Node-Backend wie ein Server-Proxy, wo die tatsächlichen Daten von Firebase abgerufen werden und die erweiterten Abfragen für diese Daten ausgeführt werden und die abgefragten Daten zurück an den Client gesendet werden. Oder Sie können serverlos gehen und dies direkt auf dem Client tun, aber dies ist, wie Sie erwähnt haben, möglicherweise nicht immer sicher für diese hochsensiblen Daten.

Grundsätzlich können Sie nicht unbearbeitete Daten vermeiden, diese Daten können jedoch minimal bleiben. Dies kann durch eine Umstrukturierung Ihrer Daten erreicht werden.

Der Rat Google gibt ist, dass Sie,

Struktur Ihre Daten nach Ihren Ansichten - Firebase, Google

Das bedeutet, dass, sagen, wenn eine Aussicht hatte, die Informationen über eine zeigt Rechnung.Traditionell, wenn Sie von SQL kommen sind, dann würden Sie so etwas wie diese

+ invoice 
    + i01 
    + date: xxx 
    + customer: xxx 
+ invoice_items 
    + ii01 
    + invoice: i01 
    + product: p 
    + qty: 1 
... 

entwerfen, was Google will Dich

+ invoice 
    + i01 
    + date: xxx 
    + customer: xxx 
    + items: [ 
     { 
      + product: p 
      + qty: 1 
     }] 
... 

diese Art und Weise zu tun ist, müssen Sie nicht ‚Notwendigkeit‘ tun eine erweiterte Abfrage, da alle Daten, die Sie für Ihre Ansicht benötigen, bereits vorhanden sind.

Das mag wie ein Schritt zurück erscheinen, denn wenn Sie darüber nachdenken, führt dies früher oder später zu einem inkonsistenten Zustand der Datenbank, und Sie haben Recht, manchmal tut es das auch. Aber Firebase stellt Maßnahmen zur Verfügung, wie zB multipath updates.

Hoffe das hilft :)

+0

THX. Sehr gute Antwort, brachte mich dazu, meine db-Struktur zu überdenken! Ich denke, ich schreibe alle Fragen serverseitig. Und speichern Sie sie nach dem ersten Anruf in einem anderen Knoten. (so etwas wie Caching) – Orlandster

+1

Sie haben die Gründe für die Kompromisse sehr gut erklärt. Sehr hilfreiche Antwort. –

Verwandte Themen