Firebase,加载相关数据?

时间:2019-04-21 19:07:19

标签: firebase firebase-realtime-database

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

  

现在我有了一条路线,用户可以访问:/ products / 1,这应该为该产品加载用户

因此,基本上,我需要让Firebase向我提供该产品用户的详细信息。 (因此在我的示例中为1和2)

执行此操作的好方法是什么?

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

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

1 个答案:

答案 0 :(得分: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

我还建议: