我的客户已经在使用2个应用程序。这些应用程序将Firebase用作数据库。
由于这两个客户及其工作人员开始输入数据,所以我已经变得非常缓慢,尤其是在旧的android设备上。
我将这种结构用于一项简单的任务,可能对这里的示例很有帮助:
在USERS下,我拥有所有用户的ID,在每个ID下,我都有:
{
"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"
}
}
重要提示:“签到”和“签出”中包含很多信息。
现在,我要检查用户列表,然后点击按钮:
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);
似乎就像一个简单的代码,想要检索信息正确吗? 但是,此简单任务在内存不足的设备上很慢,因此我猜测数据库已经有大量数据,这可能不仅是从那些引用中检索数据。
首先,我认为这是“保持同步”的代码行(因为它将同步所有代码,并且有很多用户,其中每个用户都包含许多CHECKIN和CHECKOUT)是问题所在,但是在删除它之后,该应用仍然很慢。
如果有人在Firebase方面有很好的经验,这对于大多数人来说可能是一个有用的示例和常见问题。
谢谢。
答案 0 :(得分:0)
在我发布了这个问题之后,我有了一个见识。
这样做:
ConfiguracaoFirebase.getFirebaseReferenceUsuarios()
.addValueEventListener(valueEventListener);
我得到了其中的所有信息,包括每个用户,每个CHECKIN和CHECKOUT ...所以我必须使用一条信息较少的其他路径。那就是所有的缓慢。
解决方案:将所有BASIC数据移动到不存在CHECKIN和CHECKOUT(具有大量数据信息)的新路径。