我从数据库中查询数据的性能非常低。我有200多个用户节点。每个节点都有一个arraylist。我想检查特定用户节点下可用的子节点数。这是我写的代码。
private DatabaseReference root,IdUser;
root = FirebaseDatabase.getInstance().getReference("ContactList");
IdUser = root.child(userId);
try {
IdUser.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int count = (int) dataSnapshot.getChildrenCount();
tv_count.setText(String.valueOf(count));
if (count>amount){
button.setText("Get Data");
button.setEnabled(true);
}else if (count<amount){
button.setText("Sync Data");
button.setEnabled(true);
}else {
button.setText("Sync Data");
button.setEnabled(true);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}catch (Exception e){
e.printStackTrace();
}
现在的问题是,让孩子们计算需要1分多钟。请提出我可以对我的代码进行的任何改进,以提高查询性能。提前谢谢。
答案 0 :(得分:0)
这在很大程度上取决于您在/ContactList/$uid
下为该用户提供的数据量,以及设备所拥有的带宽,以及您在其上检索的数据量。
根据定义,这将比必要的慢,因为您正在检索实际的联系人,而不仅仅是计数。
考虑为每次更新该用户的联系人列表时更新的数据库中的每个用户保留一个单独的contactCount
值。虽然这会在您更新数据时需要更多代码,但现在阅读他的数量变得轻而易举。