【发布时间】:2018-07-03 20:07:34
【问题描述】:
我正在为我的 Android 应用程序使用 Firebase 数据库。我需要一个有效期为 3 天的唯一 5 位数代码。为了解决这个问题,我在 Firebase 数据库中插入了所有可能的 5 位代码,其中每个条目最初的状态为 1。所以结构看起来像这样:
codes: {
'abcde': {status:1},
'zhghs': {status:1}
.....
}
这个codes 对象有近500 万个条目。我在想一旦代码在使用中,我会将状态设置为2。
我正在使用它从 Firebase 获取代码:
db.getReference("codes")
.orderByChild("status")
.limitToFirst(1)
.addListenerForSingleValueEvent { ..... }
我只需要 1 个状态为 1 的代码。上面的代码导致OutOfMemoryException 所以我认为它正在尝试加载设备上的所有数据。由于limitToFirst(1) 约束,它不应该只在设备端加载一个元素吗?
附:我已经尝试过使用 Firebase FireStore。截至目前,它不允许在不超过每日 20K 限制的情况下导入大量 JSON 数据。
编辑 - 我什至设置了db.setPersistenceEnabled(false)
确切的错误是:
Firebase 数据库遇到 OutOfMemoryError。你可能需要 减少同步到客户端的数据量。 java.lang.OutOfMemoryError: 分配 28701016 字节失败 分配 16777216 个可用字节和 18MB 直到 OOM
【问题讨论】:
-
请编辑您的问题,将您的描述限制在一个问题上。一切都很合理,直到最后你开始列出一堆其他问题,这些问题不适合 Stack Overflow。
-
@DougStevenson 删除了他们
-
所以,为了确定,如果您在您的应用程序中除了这个查询之外什么都不做,您会遇到同样的问题吗?
-
@DougStevenson 在我点击此查询之前,我的应用程序已完全加载。确切的错误是
Firebase Database encountered an 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 -
问题不在于您的应用完全加载。 (也许它加载太多,谁知道呢?)问题是发现查询实际上占用了太多内存而没有应用程序其余部分的上下文。
标签: java android firebase firebase-realtime-database