在Firebase中管理已排序列表的策略

时间:2013-04-08 23:33:43

标签: firebase

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

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

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

每个用户都可以按需要的顺序获取自己的sortedItems集合。这样做的问题是每个项目必须有多个请求才能获得完整的项目数据。处理完排序列表的更新后,您需要查询主列表以获取项目数据。没什么大不了的,但这是推荐的吗?

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

思想?

1 个答案:

答案 0 :(得分:2)

这是推荐的方法。非标准化在可伸缩系统中非常常见,并且应该适用于您的用例。

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