【问题标题】:Firebase storing data best practicesFirebase 存储数据最佳做法
【发布时间】:2016-06-04 08:40:18
【问题描述】:

我正在开发一个使用 Firebase 的应用。

您知道存储数据的最佳方式吗?

我已阅读他们关于构建数据的最佳实践的文档,但没有提供关于 id 的建议。

一旦用户注册,我的应用就会添加他们的用户凭据,并为他们创建个人资料。

这将存储到“配置文件”文档中,如下所示:

profile
      -> uniqueId (generated by Firebase)
                 -->  uid (unique Firebase generated uid)
                 -->  email
                 -->  password

但是在我的下一个名为“设置”的文档中,它的设置有所不同...

唯一ID不存在,它使用这样的uid

settings
        ->  uid (Firebase user Id - not a unqiue id)
               -->   setting1
               -->   setting2
               -->   setting3

那么就最佳实践而言,让 Firebase 生成一个唯一的 id 然后拥有 uid 不是更好吗?喜欢个人资料文件吗?

或者我这样做对吗?

Firebase 文档建议使结构尽可能平坦。所以我的想法是。但后来我担心索引。会不会有性能问题?

另外,如果有这样的设置文档会更好......

settings
         -> uniqueId
                -->     uid (user Id)
                -->     settings1
                -->     settings2

那么,如何访问特定 userId 的设置不会过于复杂。配置文件的设置方式不应该与设置相同吗?

可能没有更好的选择,但我很想听听想法。

非常感谢

【问题讨论】:

    标签: javascript angularjs database performance firebase


    【解决方案1】:

    uid 一个唯一的 id,因此在 /users 节点等情况下,将其 uid 用作父节点名称非常好。

    另外,如果每个用户都有自己的设置,那么将这些设置包含到 /users/uid/ 节点中会很酷。

    “扁平化更好”是座右铭,但有时扁平化实际上可能会使事情变得过于复杂。在这种情况下,用户登录并读取他们的设置。完毕。您不会对其进行查询或进行任何类型的交叉引用查找,因此只需将其与其他用户数据一起保存即可。

    总的来说,您的方向是正确的:

    使用自动创建的 ID 是一种很好的做法 - 这允许您将节点名称与其包含的数据分离。

    诸如电子邮件地址和人名之类的东西,实际上任何可能改变的东西都不是最好的节点名称,因为它们可能会在您的结构中的 200 个其他地方被引用,例如,如果电子邮件地址发生变化,您将拥有寻找 200 个地点并执行更新。 (电子邮件地址也有特殊字符,因此您必须对它们进行按摩才能使其正常工作。)

    使用自动生成的节点名称,您只需更改一次。

    【讨论】:

    • 您好,Jay 非常感谢您的回复。很高兴知道我走在正确的轨道上,我从您的解释中看到,良好的做法是将用户设置放在 /users/uid/ 内部,而不是单独使用唯一 id 实际上是 uid。但在其他情况下,最好回复 firebase 唯一 ID。这对我来说很有意义。虽然它不是过于违背他们的建议吗?结构不会更像... /users/uid/profile/ 和 /users/uid/settings/ 我的设置中有嵌套的项目,这让我担心我正在做与建议相反的事情。
    • 非常好的问题!嵌套是情境性的;如果做得好并在适当的情况下,它没有任何问题。然而,很多时候,它是在错误的地方或错误的方式完成的。这给查询和观察者增加了很多开销,导致尝试挖掘节点以获取所需的数据。这就是为什么在我的回答中,我特别指出,如果您没有运行查询并交叉引用设置,那么将它们与每个 /user 保持在一起实际上是有意义的。嘿嘿,反正你要在用户里面读,还不如同时获取他们的设置。
    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 2018-01-31
    • 2012-12-21
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多