2017-02-23 10 views
1

Firebaseで高度なクエリを作成するのに最適な方法は何か、Firebaseの高度なクエリ

現在、フロントエンドではAngular 2、App EngineではバックエンドのFirebase + NodeJS(Admin SDK)を使用しています。

フロントエンド:非機密データ

NodeJS書き込み認証/単純なクエリ/:執筆高い機密性の高いデータ/検証

ワークス完全に罰金!

しかし、今、私は高度なクエリを作成したいと私は苦労のはここです:

  • は、クエリの中に組み込まれてFirebaseのは
  • ほど強力ではありませんクライアント側は、パフォーマンス上の理由から、あまりにも悪いでしょう。
  • サーバー側と同じです。とにかく質問されていないすべてのデータを私のサーバーに転送する必要があります。

匿名のデータを転送しないようにするには、どのような方法がありますか?たぶん私はadminのSDKのためにgcloudをとにかく使用しているからでしょうか?

カスタムエンドポイントのようなものが本当に欠けています。

THXを事前に入力してください。

+0

曖昧な質問です。あなたの '高度なクエリ'と私の定義は非常に異なる可能性があります。具体的な例を示し、コードとFirebaseの構造を示してください。また、[How to Ask](http://stackoverflow.com/help/how-to-ask)も参照してください。あなたの質問を更新し、私たちは助けてください! – Jay

答えて

3

「なぜ高度なクエリを実行できないのですか?」というGoogleの回答

これは安価な切り抜きのように見えるかもしれませんが、考えられるのはfirebaseがおそらくリアルタイムであるため、データをクエリする必要があるからです。可能な限り速く、高度なクエリを提供するのに十分な時間/リソースがない可能性があります。これは単にあなたが消費するためにもっと多くのサーバーリソースを単に割り当てることができないため、Googleの視点からは理にかなっています。 Googleの心の中では、「必要なときにすべてのデータを提供します。一貫性を持たせ、必要なものをすべて実行します。」

このため、ノードのバックエンドはサーバープロキシでは、firebaseから実際のデータを取得し、そのデータに対して高度なクエリを実行し、照会されたデータをクライアントに返します。あるいは、サーバーレスで直接クライアント上で実行することもできますが、これは前述のとおり、その機密性の高いデータで常に安全であるとは限りません。

基本的に、照会されていないデータを回避することはできませんが、照会されていないデータは最小限に抑えることができます。これは、データを再構築することで実現できます。

アドバイスGoogleはあなたがある与え、

構造データあなたの意見によると - Firebase、Googleの

これが意味することについての情報を表示するビューを持っていた場合、と言うことです請求書。あなたはSQLから来ている場合は伝統的に、あなたは何をしたいのかグーグル何か

このような
+ invoice 
    + i01 
    + date: xxx 
    + customer: xxx 
+ invoice_items 
    + ii01 
    + invoice: i01 
    + product: p 
    + qty: 1 
... 

を設計したい

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

この方法、あなたは何をするのニーズ」をしないことですビューのために必要なすべてのデータが既に存在するため、高度なクエリです。

これは考えてみると、データベースの状態が遅かれ早かれ不一致の状態に陥るだけで、あなたが正しいと思うので、時にはそのようになるかもしれません。しかし、Firebaseは、multipath updatesのような対策を提供しています。

希望します。

+0

THX。非常に良い答えは、私のDB構造を考え直させてくれました!私はすべてのクエリのサーバー側を書くだろうと思う。別のノードで最初の呼び出しの後に保存します。 (キャッシュのようなもの) – Orlandster

+1

あなたはトレードオフの理由を非常にうまく説明しました。非常に有用な答え。 –

関連する問題