导出数据以预加载到移动应用中的 Firebase 实例中

Posted

技术标签:

【中文标题】导出数据以预加载到移动应用中的 Firebase 实例中【英文标题】:Export data to preload into a Firebase instance in a mobile app 【发布时间】:2018-06-14 19:20:08 【问题描述】:

用例是用于活动的双平台移动应用。有一张附有照片、链接、演讲者简历和演讲描述的时间表。如果所有与会者碰巧同时在同一个地方下载并打开应用程序,他们可能无法获得最佳体验 -> WiFi 可能会减慢对数据服务器的调用,对 FireBase 服务器端的调用会激增.

是否可以从服务器端导出数据库并将活动时间表数据预加载到移动应用程序下载中?启动后,该应用可以根据需要通过连接和与 Firebase 的短暂同步来同步任何最后一分钟的更新。

如果这种类型的架构不可用,Firebase 团队会推荐替代方案吗?

【问题讨论】:

【参考方案1】:

Firebase 数据库 API 无法将数据预加载到磁盘缓存中。

我能想到的两件事(都不是很好):

    让客户端从您应用的资源中读取 JSON 文件并将其写入到该位置。这样做的最终结果是服务器上的数据保持不变。但它确实会导致每个客户端向服务器写入相同的数据,因此与您的原始问题相反(并且可能性能更差)。 对从 JSON 文件加载的 Firebase API 调用进行包装,然后让它们在随机延迟后附加侦听器(以减少应用程序的繁忙)。

如前所述,它们都不是很好。对于它们,您可以从Firebase Database console 下载 JSON。

根据我的经验,会议应用程序的使用率远低于大多数开发人员/组织者的想象。它通常也很好地分布在会议期间。因此,减少加载的数据量可能足以让事情正常进行。

【讨论】:

这在大多数情况下是正确的,但图像和其他更丰富的媒体等某些内容可能会对会议室 wifiz 造成一些损害 在处理实时数据同步时总是寻找将需要同步的数据最小化的方法。所以不要在数据库中存储这种类似blob的对象,而是将它们存储为文件。您可以在可能的情况下将文件作为资源与您的应用一起发布,并将可能的更新存储在 Cloud Storage 上。然后从数据库中链接到文件。并对 URL 进行指纹识别或使用时间戳来指示上次更新(以帮助您确定是应该从本地资源还是从云存储加载)。 感谢您的帮助。图像文件令人担忧。网站上的下载路径可以是照片的来源。 1. 从导出的 JSON 本地构建客户端结构 2. 使用时间戳来限定所有客户端 Firebase 查询。计划的种子数据是本地 JSON,不会在客户端的 Firebase 中。客户端查询比种子数据更新的数据,每个查询都以这种方式进行限定。当有任何重复时,来自服务器的结果会覆盖本地加载的数据。听起来对吗? @FrankvanPuffelen 听起来很难吗? 是的,这听起来可行但相当复杂。我真的很想知道您的计划 JSON 会有多大,以及是否真的需要这种预加载。如果您保持 JSON 较小并进行一些餐巾纸计算,这可能都是不必要的。 如果您愿意,请忽略会场 WiFi 带宽有限带来的问题。这不是数据的大小。这是开箱即用的体验 (OOBE) 例如,当 WiFi 无法满足需求时,DevFest DC 研讨会的与会者会受到阻碍。我不希望在我的应用程序中获得这种体验。您和其他人可能很容易忽略 -> 我制作的应用程序会飞。【参考方案2】:

android 上,您可以在应用程序的 assets 目录中提供一个 sql 数据库,然后在用户打开应用程序时将其与更新进行协调。 Firebase 数据库是一个 json 文件。您也可以将它放在资产目录中,然后在首次加载时进行协调。

【讨论】:

是的,重要的是“协调”部分。你有例子吗?

以上是关于导出数据以预加载到移动应用中的 Firebase 实例中的主要内容,如果未能解决你的问题,请参考以下文章

将原始“事件”数据从 Firebase 导出到大查询?

将数据从 firebase 导出到 bigQuery?

我应该在哪里从 UIViewController 中的 firebase 加载数据

发布我的应用的新版本后,Firebase 数据未导出到 BigQuery

如何将数据从 Firebase Crashlytics 导出到另一个应用程序?

无法按 BigQuery/Firebase 中的内容对购买者进行排序