Я использую базу данных Firebase для своего приложения для Android. Мне нужен был уникальный 5-значный код, который должен быть действителен в течение 3 дней. Чтобы решить эту проблему, я вставил все возможные 5-значные коды в базу данных Firebase, где каждая запись изначально имеет статус 1
. Итак, структура выглядит примерно так:
codes: {
'abcde': {status:1},
'zhghs': {status:1}
.....
}
Этот codes
объект имеет около 5 миллионов записей. Я думал, что установлю статус на 2
, как только код будет использован.
Я использую это, чтобы получить код из Firebase:
db.getReference("codes")
.orderByChild("status")
.limitToFirst(1)
.addListenerForSingleValueEvent { ..... }
Мне просто нужен 1 код, который имеет статус 1
. Приведенный выше код вызывает OutOfMemoryException
, поэтому я думаю, что он пытается загрузить все данные на устройство. Разве он не должен просто загружать один элемент на стороне устройства из-за ограничения limitToFirst(1)
?
P.S. Я попробовал свои силы в Firebase FireStore. На данный момент он не позволяет импортировать огромные данные JSON без превышения ежедневных лимитов в 20 КБ.
Редактировать - я даже установил db.setPersistenceEnabled(false)
Точная ошибка:
База данных Firebase обнаружила ошибку OutOfMemoryError. Вам может понадобиться
уменьшите объем данных, которые вы синхронизируете с клиентом.
java.lang.OutOfMemoryError: не удалось выделить 28701016 байт
распределение с 16777216 свободных байтов и 18 МБ до OOM