2017-02-02 2 views
1

firebaseは項目を数えにくいknown issueです。カウントやその他の集計に大きく依存するアプリを作成する予定です。私はhereが示唆しているように、このアプリケーションのカウンタを作成することは恐ろしいほど複雑で、維持するのが難しいと考えています。カウンターとアグリゲートを維持するためのFirebaseコントロールサーバー

だから私はこのパターンについて考えた:

私はすべての項目データベースに入力し、このサーバがすべてのカウンタや集計を更新するに耳を傾けるだろうサーバーを維持します。サーバーはカウンターを更新できるのは特別な管理者のUIDを保持します。

このようにして、ユーザーはカウントを取得するためにノード全体をダウンロードする必要はなく、クライアントによるカウンタの維持に起因する問題に対処する必要もありません。

このパターンは意味がありますか?何か不足していますか?

答えて

1

Firebaseは最近クラウド機能をリリースしました。 documentationに述べたように:

クラウド機能を使用すると、JavaScriptコードを実行することができ、ホスト型プライベート、かつスケーラブルなNode.jsの環境 です。

クラウド機能では、独自のサーバーを作成する必要はありません。 JavaScript関数を記述してFirebaseにアップロードするだけです。 Firebaseは、イベントが発生するたびに機能を起動させる役割を担います。

たとえば、投稿内の好き嫌いの数を数えたいとします。

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

そして、あなたのJavaScript関数のように書かれます:

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()); 
}); 

このコードはlikesに新しい書き込みがあるlikes_count変数たびに増加あなたはこの1と同様の構造を持っている必要がありますノード。

このサンプルは、GitHubで入手できます。

関連する問題