Firebase中排序列表的管理策略

Firebase中排序列表的管理策略,firebase,Firebase,如果我有一个包含一百万个项目的主列表,另一个包含一百万个用户的列表,并且每个用户都有一个包含50个项目的自定义排序子集,那么建模的直接方法如下所示: items [itemID] : { name : 'aaa', description : 'bbb', ... } ... users [userID1] : { name : 'john', token : 'xyz', sortedItems : {

如果我有一个包含一百万个项目的主列表,另一个包含一百万个用户的列表,并且每个用户都有一个包含50个项目的自定义排序子集,那么建模的直接方法如下所示:

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

users
    [userID1] : {  
        name : 'john', 
        token : 'xyz',
        sortedItems : {
            itemID1 : xx,
            itemID2 : xx,
            ...
        } 
    }
每个用户都将以所需的任何顺序获得自己的sortedItems集合。这样做的问题是,每个项目必须有多个请求才能获取完整的项目数据。在处理对排序列表的更新之后,您需要查询主列表以获取项目数据。没什么大不了的,但这是推荐的吗

另一种策略是复制主列表和子列表中的项目数据(或删除主列表)。这样,当你需要的时候,所有的数据都在那里。这方面的明显问题是同步。如果项目的属性发生更改,会发生什么情况?您必须遍历每个用户的sortedItems列表并更新每个实例——这会导致严重的数据不一致


想法?

这是推荐的方法。去规范化在可伸缩系统中非常常见,应该适合您的用例


我建议只复制密钥,而不复制数据。这样就不会出现同步问题,每个人都将共享一个主状态。加载每个项目时,您将需要额外的往返时间,但请注意,Firebase在处理大量回调和缓存更新方面非常聪明,因此我怀疑您会发现它仍然非常快。

您可以查看我的github项目,以获得使用类似索引的一些示例。非常有趣的项目!这正是我试图做的。