У меня есть база данных с примерно 7-8 тысячами пользователей, каждый раз, когда я делаю getChildrenCount()
, чтобы подсчитать, сколько людей в моем приложении, мне действительно нужно много ждать, пока оно обработается и появится.
Интересно, есть ли способ, например, хранить в моей базе данных длинную переменную, такую как
totalusers = 7561
может обновляться каждый раз, когда новый пользователь добавляется в корневой узел, поэтому я просто запрашиваю у тотальщиков и каждый раз получаю быстрый запрос на точное количество пользователей
Я думал о чем-то подобном, чтобы следить за моими пользователями и просто запрашивать переменную 1 и получать данные как можно быстрее
"rules": {
"users": {
".indexOn": "totalusers"
}
это хороший способ реализовать это поведение?
Редактировать:
это то, чем я сейчас занимаюсь
public long getUsers(DatabaseReference mDatabase){
mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
users = dataSnapshot.getChildrenCount();
Log.e(TAG, "onDataChange: "+users);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return users;
}
но это слишком медленно, например, 1 минута для подсчета 7500 пользователей, а также другие мои операции с firebase не выполняются до конца, поэтому он блокирует мой пользовательский интерфейс и ничего не показывает
спасибо!