У меня есть 2 приложения, которые уже используются моими клиентами. Эти приложения используют Firebase в качестве БД.
С тех пор, как эти два клиента и их команда начали вводить данные, я достиг точки, когда они становятся очень медленными, особенно на старых устройствах Android.
Я использую эту структуру для одной простой задачи, которая может быть полезна для примера здесь:
в разделе ПОЛЬЗОВАТЕЛИ у меня есть все идентификаторы моих пользователей, а под каждым идентификатором есть:
{
"checkin" : {
"Data: 1-11-2018 Horario checkin: 19:02" : {
"ano" : "2018",
"checkIn" : true,
"checkoutCorrect" : true,
"dia" : "1",
"hora" : "19",
"latitude" : "-22.42003992",
"longitude" : "-45.4668167",
"mes" : "11",
"minuto" : "02",
"nomePaciente" : "NAME 2"
},
(...)
},
"checkout" : {
(...)
},
"pacientes" : {
"NAME" : "Mon Oct 01 20:16:36 GMT-11:00 2018"
},
"user type" : "FUNCIONARIO",
"usuario" : {
"alreadyAtribuidoAoPaciente" : false,
"datanascimento" : "03/05/1970",
"deviceModel" : "motorola XT1097",
"funcao" : "TECNICO DE ENFERMAGEM",
"lastLogin" : "7-3-2019 18:52",
"nome" : "NAME",
"nroconselho" : "530918",
"telefone" : "35999428676",
"tipousuario" : "FUNCIONARIO",
"userID" : "8H1tHvz3BcR3XeCjz6BWXvC9fFM2",
"version" : "2.00"
}
}
Важно: «Checkin» и «Checkout» содержат много информации.
Теперь я хочу проверить список пользователей и нажимаю кнопку:
ConfiguracaoFirebase.getFirebaseReferenceUsuarios().keepSynced(true); //this is the Firebase reference to USERS explained above
startActivity(intentThatHasAList);
после начала нового действия я загружаю данные, выполнив:
valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (final DataSnapshot snap: dataSnapshot.getChildren()){
if (snap.child("user type").getValue().equals("ADMIN")){
final Usuario recordUser = new Usuario();
recordUser.setName(snap.child("usuario").child("nome").getValue().toString());
//...
recordUser.setId(snap.getKey());
listUsuarios.add(recordUser);
}
reorderArray();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
ConfiguracaoFirebase.getFirebaseReferenceUsuarios()
.addValueEventListener(valueEventListener);
похоже на простой код, который хочет получить информацию, верно?
Однако эта простая задача медленна на устройствах с низким объемом памяти, поэтому я предполагаю, что из-за того, что база данных уже получила большой объем данных, она может получать данные не только из этих ссылок.
Сначала я подумал, что эта строка кода "keepynced" (так как он будет синхронизировать все под ним, и есть много пользователей, каждый из которых содержит много CHECKIN и CHECKOUT), была проблемой, но после того, как я удалил ее, приложение все еще медленно.
Если у кого-то есть хороший опыт работы с Firebase, это может быть полезным примером и распространенной проблемой для большинства людей.
Заранее спасибо.