2017-07-01 17 views
0

私は、ユーザーが投稿できるサブルームを保持する部屋を持っています。私は24時間未満のユーザー投稿をユーザーに表示したいだけです。例えばFirebaseデータベース構造のアドバイス

Cats 
    kittens 
     users : 10 
     posts : 
     ksjdflkjaslkdjf 
       userUID : 123 
       postCaption : "I like kittens" 
       postTimestamp : 203940340930 

だからここに、ユーザーは子猫の別室に、猫の部屋に行き、子猫について投稿された記事を見てみたかった場合、私はしたいと思いますタイムスタンプが24時間未満の投稿を返す。

データベースを構成する最も効果的な方法はわかりません。今のところ設定されている問題点は、1000万の子猫の投稿があると、ユーザーが投稿を読み込もうとするたびに、firebaseは各投稿を通過し、タイムスタンプをチェックして有効かどうかを確認する必要があります。

代替オプションは、次のようになります。

Rooms: 
    Cats 
     kittens 
      users : 10 
      posts : 
      post1UID : 209384938942024234 //The value here would be the timestamp 
      post2UID : 309238942024234 

    Posts : 
     209384938942024234 
      userUID: 123 
      postCaption : "....." 
      postTimestamp : 209384938942024234 

と私は唯一の有効なタイムスタンプ付きの記事を照会し、投稿をつかむ行くためにポストUIDを使用すると思います。

開始する前にこれを行う最善の方法についてアドバイスをいただけますか? ありがとうございます。

答えて

0

投稿の一覧を照会するだけで、過去24時間の投稿をリクエストすることができます。 you can't enforce this with security rulesの間は、少なくともあなたのコードを正しいものにすることができます。

しかし、あなたのアプリが24時間以上ライブされた後、既に知っているデータを照会している場合、と一致しません。

これを防ぐには、FirebaseなどのNoSQLデータベースでは、アプリケーションの特定のユースケースのデータをモデル化することがよくあります。したがって、過去24時間の投稿のリストをユーザーに表示させたい場合は、過去24時間の投稿のリストを持つようにデータベースをモデル化する必要があります。

次の2つの方法でこれを行うことができます:

  1. のみ各部屋のためにポストの最も最近の24時間を維持します。 24時間以上経過したデータを削除するだけです(例:新しい投稿が追加されたとき、またはcronによってトリガーされたときCloud Function。あるいは、古い投稿を別のノードに移動することも、BigQueryのようなシステムに移行することもできます。これは、このような履歴データの処理に適しています。
  2. 現在の構造を維持しながら、二次インデックスを追加してください:最終日の投稿の投稿IDのリスト。これを行うための簡単な方法は、キーとして各ポストのIDを維持することで、値としてのタイムスタンプ:

    roomId1: 
        post1UID: timestamp 
        post2UID: timestamp 
    

    あなたのアプローチとDiffereneの(少なくとも私の知る限り、私のクイックスキャンで見たように)インデックスには最新の24時間のポストしかないので、ポストを読むためにクエリを行う必要はありません(それらをクリーンアップするだけです)。

関連する問題