调试Firebase实时数据库方法ValueEventListener.onDataChange
、DataSnapshot
从云中加载所有数据。
考虑到低内存成本,处理大量数据的最佳解决方案是什么(从设备的角度来看(?
我希望实现这两种功能,使用Firebase实时数据库每天更新房间数据库中的存储本地数据。通过这种方式,基于用户交互,只将必要的数据加载到设备的内存中。
考虑到低内存成本,处理大量数据的最佳解决方案是什么(从设备角度来看(?
最好的解决方案是使用限制。这是有关在Firebase实时数据库中过滤数据的官方文档。正如你所看到的,有一些方法可以帮助你实现这一点。
如果你试图加载大量数据,你可能会遇到一个听起来像这样的错误:
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安全规则,您应该在desired
属性上定义一个索引。它可以简单到:
{
"rules": {
"codes": {
".indexOn": "yourProperty"
}
}
}