如何扩展Firebase数据库QuickStart,能够处理大量用户,以及使Post Data更加昂贵的含义



我正在使用firebase数据库quickstarthttps://github.com/firebase/quickstart-android/tree/master/database

在数据模型的描述下,已提到"这个Quickstart展示了一个简单的社交应用数据模型。尽管该数据模型使用了一些Firebase最佳实践,但它的一些已知权衡为简单而进行,但不会扩展到大量用户。该数据库具有四个" root"节点:用户 - 用户ID键入的用户对象列表。SO/用户//电子邮件是具有ID =的用户的电子邮件地址。帖子 - 帖子对象列表,由随机生成的推送ID键入。每个帖子都包含UID和作者属性,以确定在没有连接式查询的情况下作者的身份。帖子包含一个星星属性,该属性是用户ID的地图,以布尔值。如果/posts//stars/是true,则意味着具有ID的用户已与ID一起出演了帖子。这些数据嵌套使得很容易判断特定用户是否已经出演了特定帖子,但不会扩展到每个帖子的大量星星,因为这会使加载帖子数据更昂贵"

感谢有人可以解释他们的含义:1不会扩展到大量的用户。2不会比每个帖子缩放大量星星,因为这会使加载后数据更昂贵。

首先,您需要了解燃料的当前成本和局限性。DataSnapshot的大小越大,它将从数据库中下载的字节越多。总下载字节直接转化为Firebase计费成本。让我们举一个例子:

假设您有此数据库结构用于存储帖子的星星。Post/<Post-ID>/stars/<User-ID>。您的帖子有20星,然后看起来像这样

Post:{
    postId:{
        stars:{
            user1:true,
            user2:true,
                ...
            user20:true
        }
    }
}

和此快照的大小是200个字节。现在想象您的帖子变得很受欢迎,并拥有100万星。在这种情况下,您的快照尺寸将从200个字节增加到1 kb。而您的快照将看起来像这样:

Post:{
    postId:{
        stars:{
            user1:true,
            user2:true,
                ...
            user1000001:true
        }
    }
}

现在,对于这篇文章,它将需要更多数据才能下载,另外将需要更多时间来显示该帖子的星数。

有很多方法可以使其高效。您可以帮助Firebase Cloud功能的实时数据库触发器并制作更好的结构。

这是您第二个问题的答案。

现在,对于第一个问题,您应该了解火箱的局限性和计费计算。了解火底限制。为了使更好的数据库体系结构和可扩展性firebase为我们提供了带有firebase的多个数据库实例。

希望它有帮助!

最新更新