1

100 万のアイテムのマスター リストと 100 万のユーザーの別のリストがあり、各ユーザーが 50 アイテムのカスタム ソート サブセットを持っている場合、それをモデル化する直接的な方法は次のようになります。

items
    [itemID] : { name : 'aaa', description : 'bbb', ... }
    ...

users
    [userID1] : {  
        name : 'john', 
        token : 'xyz',
        sortedItems : {
            itemID1 : xx,
            itemID2 : xx,
            ...
        } 
    }

各ユーザーは、必要な順序で独自の sortedItems コレクションを取得します。これの問題は、アイテムの完全なデータを取得するために、アイテムごとに複数のリクエストが必要になることです。並べ替えられたリストの更新を処理したら、マスター リストにクエリを実行して項目データを取得する必要があります。大したことないのですが、これはお勧めですか?

もう 1 つの方法は、マスター リストとサブリストの両方でアイテム データを複製する (またはマスター リストを削除する) ことです。そうすれば、必要なときにすべてのデータがすぐそこにあります。その明らかな問題は同期です。アイテムのプロパティが変更されるとどうなりますか? すべてのユーザーの sortedItems リストをループして、各インスタンスを更新する必要があります。これは、深刻なデータの不整合の原因です。

考え?

4

1 に答える 1

2

おすすめの方法です。非正規化は、スケーラブルなシステムでは非常に一般的であり、ユース ケースでうまく機能するはずです。

データではなくキーのみを複製することをお勧めします。そうすれば、同期の問題は発生せず、全員が 1 つのマスター状態を共有します。各アイテムをロードするときに余分なラウンドトリップが発生しますが、Firebase は多数のコールバックの処理と更新のキャッシュについて非常にスマートであるため、それでもかなり高速であることがわかると思います。

于 2013-04-08T23:43:04.953 に答える