Firebase Fan out - 最具成本效益的方式?

时间:2016-10-01 14:30:20

标签: firebase firebase-realtime-database

我知道这个问题可能已多次提出,但我已经阅读了大部分可用的问题,但没有找到任何可以帮助回答我的问题。正如Firebase团队所建议的那样,扇出技术是确保快速数据读取的推荐方法,但却带来了数据复制的成本。我知道这个问题是主观的,取决于应用程序,但在节省成本($)和数据读取方面哪个是最好的解决方案?

  1. 在多个子节点中发布相同的节点(保存数据只读一次, 但是有多余的,所以要消耗更多的Firebase存储空间)(见图Firebase Database - the "Fan Out" technique
  2. 仅发布一个节点,并通过其密钥对节点进行其他引用(不冗余并消耗较少的Firbase存储,但需要读取两次 - 获取密钥,并获取密钥的节点)(参见图像{{3 }})
  3. 对于上下文,我正在构建一个非营利性市场应用程序,因此我需要在节省成本($)和快速数据读取之间平衡应用最佳解决方案。

    另一方面,读取两次(带宽)与更大的存储空间?哪一个更具成本效益?

1 个答案:

答案 0 :(得分:8)

我首先要说,理想情况下,您在Firebase中阅读或同步只需要的内容。因此,您的数据库查询会被其他过滤器耦合,以使查询具体如下可能。如果你可以指出,那么无论如何你将构建一个非常智能的数据结构,这将是具有成本效益的。

现在真正的辩论 Fan-Out技术或只是发布对节点的引用因为我个人更喜欢Fan-Out并且也成功使用它因此我将仅参考该技术,这也将为您提供使我不想使用保留参考的原因的指示。

  • 首要的是终端用户体验和性能。其中包含大数据块同步的形式。总的来说,这意味着而不是下载小块的目标是最大的,以便你减少高单元无线电使用高电池耗电高带宽,同时保持应用更新并尽可能快地同步

如果你的目标是那种应用程序性能,那么你清楚地看到 扇出是明显的赢家 而不是其他技术由于以下原因。

  1. 您下载存储在其他节点中的大数据块,该节点不会让您的小区无线电长时间保持不变。
  2. 当您一次下载整个信息时,您的应用程序比其他应用程序表现更好。显然,我并不是说你应该下载完整的数据库。 这一切都与智能平衡有关,这使您可以首先下载所需的内容。
  3. 并不是说这是唯一能让您获得更快读取和更好数据结构的技术。 还有其他技术,如索引,数据验证和安全规则,这些技术同样重要。 所有与正确的数据结构正确耦合将为您提供更好的性能。
  4. 在您只引用其他节点而非实际数据的情况下,您最终可能无法向用户显示任何内容。假设您的用户没有获得良好的连接性所以在一次阅读之后只给出了参考,网络就会崩溃。所以,直到网络重新启动您的用户看不到任何内容并相信我这是应用程序的非常糟糕的情况。 您作为开发人员的目标应该是减少这些情况的可能性
  5. 所以,我会建议您选择FAN-OUT技术,因为当您看到数据过滤,索引和安全规则等其他因素时,它会更快,更具成本效益。是的,它有一个很高的存储使用价格。但是当你没有满意的用户时,更少的存储意味着什么呢?仍然归结为个人偏好。但我已经分享了我的经验和想法,希望它能帮助你做出正确的决定。

    我鼓励您完成this并更深入地了解无SQL数据建模

    请告诉我此信息是否对您有所帮助。