【问题标题】:Android - Memory Cost - Firebase Realtime Database x Room Persistence LibraryAndroid - 内存成本 - Firebase 实时数据库 x 房间持久性库
【发布时间】:2019-01-05 19:22:25
【问题描述】:

调试 Firebase 实时数据库方法 ValueEventListener.onDataChangeDataSnapshot 从云端加载所有数据。

考虑到低内存成本,处理大量数据(从设备角度)的最佳解决方案是什么?

我希望实现两者,使用 Firebase 实时数据库进行每日更新,以使用 Room 数据库存储本地数据。这样,根据用户交互,仅将必要的数据加载到设备的内存中。

【问题讨论】:

    标签: android firebase memory firebase-realtime-database android-room


    【解决方案1】:

    考虑到低内存成本,处理大量数据(从设备角度)的最佳解决方案是什么?

    最好的解决方案是使用限制。这是 Firebase 实时数据库中关于 filtering data 的官方文档。如您所见,有一些方法可以帮助您实现这一目标。

    如果您尝试加载大量数据,您可能会遇到如下错误:

    OutOfMemoryError. You may need to reduce the amount of data you are syncing to the client. java.lang.OutOfMemoryError: Failed to allocate a 28701016 byte allocation with 16777216 free bytes and 18MB until OOM
    

    在这种情况下,您应该在所需属性上创建索引。没有它,服务器无法为您进行排序/过滤,它将在客户端完成。这意味着客户端必须读取所有数据并将其保存在内存中,这说明了巨大的内存使用量。

    解决方案非常简单。使用Firebase Security Rules,您应该在desired 属性上定义一个索引。它可以很简单:

    {
      "rules": {
        "codes": {
          ".indexOn": "yourProperty"
        }
      }
    }
    

    【讨论】:

    • 你的解释很好,我不知道这个 Firebase 索引功能。但我认为我需要更改我的 JSON 数据模型以使索引可行。目前我的数据模型遵循这种模式:pastebin.com/zv6Jz679 为了提高 Firebase Query 的可用性,我认为数据库模型必须是这样的:pastebin.com/Sv7cdvuY
    • 构建 Firebase 数据库没有完美的解决方案。最好的解决方案是适合您的需求并使您的工作更轻松的解决方案。如果该架构最适合您,请继续使用它。对于 FIrebase 中的大量数据,添加索引是一种常见的做法。
    • 如果您认为我的回答对您有所帮助,请考虑接受并投票。我会很感激的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-01-22
    • 2017-03-27
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多