【问题标题】:Firebase, load related data?Firebase,加载相关数据?
【发布时间】:2019-04-22 05:26:04
【问题描述】:

我正在使用具有用户的产品的平面数据库布局,数据库布局如下所示。这是处理 Firebase 数据的常用“平面”方式。

现在我有一个路由,用户可以访问:/products/1,它应该加载该产品的用户

所以基本上我需要让 Firebase 向我提供该产品用户的用户详细信息。 (所以在我的例子中是 1 和 2)

有什么好的方法来解决这个问题?

products: [
    {
        id: 1,
        name: 'Product One',
        users: [
            1: true,
            2: true

        ]
    } 
],
users: [
    {
        id: 1,
        name: Tom
    }
]

【问题讨论】:

    标签: firebase firebase-realtime-database


    【解决方案1】:

    有两个主要选项

    1. 根据需要为每个用户加载数据。这被称为客户端连接,是一种非常常见的解决方案。自requests for the users are pipelined over the single existing connection 以来,性能并不像许多开发人员想象的那么差。当然,您可以通过缓存最近请求的用户来对请求进行重复数据删除。
    2. 复制每个产品下每个用户的主要数据。例如:如果您需要在产品中显示每个用户的用户名,您可以将每个用户的名称存储在每个产品下:

      products: [
          {
              id: 1,
              name: 'Product One',
              users: [
                  1: "Tom",
                  2: "Notflip"
              ]
          } 
      ],
      

      使用这种数据结构,您只需加载产品节点,不需要连接(无论是服务器端还是客户端)。如果您来自关系数据库背景,这可能会引发您所有的“规范化警报”,但在 NoSQL 数据库中,这种类型的数据重复很常见。虽然它使写入操作更加复杂(由于需要扇出数据),但它使读取操作非常简单,并且具有极强的可扩展性。

      要了解有关处理重复数据更新的更多信息,请参阅How to write denormalized data in Firebase

    我也推荐:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-31
      • 2021-11-25
      • 2015-01-03
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多