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

Joh*_*ohn 6 firebase firebase-realtime-database

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

  1. 在多个子节点中发布相同的节点(保存数据只读一次,但有冗余,因此消耗更多的Firebase存储)(参见图像Firebase数据库 - "扇出"技术)
  2. 仅发布一个节点,并通过其密钥对节点进行其他引用(不冗余并消耗较少的Firbase存储,但需要读取两次 - 获取密钥,并获取密钥的节点)(请参阅图像https:// stackoverflow. com/a/38215398/1423345)

对于上下文,我正在构建一个非盈利市场应用程序,因此我需要在节省成本($)和快速数据读取之间平衡应用最佳解决方案.

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

Nis*_*bey 8

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

现在真正的争论Fan-Out技术还是只是对节点的帖子引用.因为我个人更喜欢Fan-Out并且也成功使用它所以我将仅仅参考该技术,这也将为您提供使我不想使用保留参考的原因的指示.

  • 首要的是终端用户体验和性能.它以大数据块同步的形式出现.总的来说,这意味着不是下载小块而是为了尽可能地降低小块,以便减少高小区无线电使用,高电池耗电,高带宽,并且尽可能快地保持应用更新和同步.

如果您的目标是那种应用程序性能,那么您可以清楚地看到, 由于以下原因,Fan-Out明显 胜过其他技术.

  1. 您下载存储在其他节点中的大数据块,该节点不会让您的小区无线电长时间保持打开状态.
  2. 当您一次下载整个信息时,您的应用程序比其他应用程序表现更好.显然,我并不是说你应该下载完整的数据库.这一切都与智能平衡有关,这使您可以首先下载所需的内容.
  3. 并不是这是唯一能够为您提供更快读取和更好数据结构的技术.还有其他技术,如索引,数据验证和安全规则,这些技术同样重要.所有与正确的数据结构正确耦合将为您提供更好的性能.
  4. 在您只引用其他节点而非实际数据的情况下,您最终可能无法向用户显示任何内容.假设您的用户没有获得良好的连接性,因此在一次阅读后只给出了参考,网络就会崩溃.所以,直到网络再次启动,你的用户才会看到任何东西并相信我这对应用来说是一个非常糟糕的情况. 您作为开发人员的目标应该是减少这些情况的可能性

因此,我建议您选择FAN-OUT技术,因为当您看到其他因素(如数据过滤,索引和安全规则)时,它更快,更具成本效益.是的,它有一个很高的存储使用价格.但是,当您没有满意的用户时,更少的存储意味着什么呢?这一切都归结为个人偏好.但我已经分享了我的经验和想法,希望它能帮助你做出正确的决定.

我鼓励您完成这项工作,并对没有SQL数据建模有更深入的了解

如果这些信息对您有帮助,请告诉我.