【问题标题】:Firebase for a "big" amount of data用于“大量”数据的 Firebase
【发布时间】:2017-07-23 07:39:34
【问题描述】:

我们正计划将我们的应用程序迁移到 Firebase 以获得实时功能并提高性能。 这是一个存储客户产品和销售数据的销售应用程序。 我们的客户(我们称之为 Groups)通常每个都有 10 家商店(我们称之为 Companies)。

处理这么多数据并不是什么大问题。 但最近我们与一家拥有 1000 多家商店(每月新增 20 家)的大集团达成了交易。

我的问题是如何在没有性能问题的情况下构建这些数据并保持实时功能?

我认为,如果我们专注于如何构建 Groups-Companies,我们可以处理其他部分(销售、产品等)

"Groups": {
    "Group1": {
      "name": "Historical Tech Pioneers"
    },
    "Group2": { ... }
}

"Stores": {
    "Store1": {
      "name": "abc",
      "group" "Group1"
    },
    "Store2": {
      "name": "def",
      "group" "Group1"
    },
}

这种数据结构每次都可以处理数千条记录吗?

如果我每次都必须查询超过 1000 家商店,我会非常担心 Firebase 的性能。 每个人都说 1.000 条记录对于 Firebase 来说不算什么,但我做了一些测试,发现检索 1.000 条记录并没有他们说的那么流畅。

【问题讨论】:

  • 您想要一个查询来检索所有 1000 条记录到某个客户端应用程序?这听起来不是个好主意。通常,您希望通过这些记录中的某个值使用索引查询来检索其中的一个或一小部分。
  • 实际上,并非所有用户都会访问所有商店。我认为一个好主意是 User_Stores 节点,我可以在其中存储用户有权访问的所有商店。
  • @HugoRamos “我做了一些测试,发现检索 1.000 条记录并不像他们说的那样流畅” 请显示您的测试代码。更好的是:在我们可以访问它的地方复制它,例如 jsbin。只有这样,我们才能看到相同的东西并帮助您优化。另请参阅我对列表大小限制的解释:stackoverflow.com/questions/39712833/…
  • 讨论 NoSQL 数据模型仅在特定用例的上下文中有意义。您通常会扩展您的数据模型以适应新的用例。有关一般介绍,请参阅 NoSQL data modeling 和查看 Firebase for SQL developers

标签: angular firebase firebase-realtime-database nosql


【解决方案1】:

所以我有一个 建议,即像这样组织 firebase 数据:

"Groups": {
    "Group1": {
        "name": "Historical Tech Pioneers"
        "Stores": {
            "Store1": {
                "name": "abc"
            },          
            "Store2": {
                "name": "def"
            }
        },
    },
    "Group2": { ... }
}

要获得商店,只需指向 Groups>Group1>Stores。为了获得更好的性能,将页面添加到 firebase 数据,例如每页 10 个商店。

注意:只是一个建议。

【讨论】:

  • 如果想要获取所有组名的列表,这意味着您将获得所有组存储。发送了很多不必要的数据...
  • 是的,你是对的,我不认为有这种可能性,我只认为在性能上获得所有商店,我的错。
【解决方案2】:

由于在数据库中的某个位置获取数据还会检索其所有子节点,因此您希望使数据库结构尽可能平坦。您的建议类似于docs 中的结构。在我看来,你的方向是正确的。

看看你的例子,我可能会重新构建Stores-node,以轻松获取一个组的所有商店:

"Stores": {
    "Group1": {
        "Store1": {
            "name": "abc"
        },
        "Store2": {
            "name": "def"
        },
        ...
    },
    ...        
}

在文档(一个example)中,我读过非规范化是一个关键字。不要害怕复制数据以加快读取速度。您打算如何使用您的数据应决定您如何构建数据。

作为克里斯·埃斯普林wrote:
“我们必须根据我们想要使用数据的方式不断平衡规范化(浅层结构)与非规范化(深层结构)。”

【讨论】:

  • 很高兴知道我们做得对。但问题仍然存在:在客户端,最终,1.000 条记录会很繁重吗?
  • Firebase 旨在处理大型数据集。您如何处理数据集客户端?您使用什么事件来检索数据? valuechild_added?
  • 我在客户端处理数据集。我认为使用 Firebase 作为 BaaS 的目标之一是在不需要自定义 API 的情况下处理数据。我说的对吗?
猜你喜欢
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多