Firebase查询从Android应用程序下载大量数据
我正在从Android应用程序向Firebase进行查询,查询如下: 问题1Firebase查询从Android应用程序下载大量数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在从Android应用程序向Firebase进行查询,查询如下: 问题1 reference.orderByChild("started").equalTo(true)..addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { gameOnList.clear();
reference.orderByChild("started").equalTo(true)..addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
gameOnList.clear();
for (DataSnapshot gamesSnapshot : dataSnapshot.getChildren()){
Game game = gamesSnapshot.getValue(Game.class);
if(game.isStarted()) gameOnList.add(game);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
此查询返回5个结果,但消耗量为1.5 Mb,就好像它返回所有记录一样。会发生什么
我已经做了另一个测试,使用以下查询不会发生数据消耗:
问题2
Reference.limitToLast (5) .addValueEventListener (new ValueEventListener () {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
gameOnList.clear();
for (DataSnapshot gamesSnapshot : dataSnapshot.getChildren()){
Game game = gamesSnapshot.getValue(Game.class);
if(game.isStarted()) gameOnList.add(game);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
还返回5条记录,但在本例中仅消耗10KB
我如何才能在不过度消耗数据的情况下进行第一次查询
查阅的数据库有大约1800条记录
数据库的结构如下所示:
Game:
-KW_-cgwIPt5E8lzguds:
level1: array
level2: array
level3: array
level4: array
player1: String
player1Pts: int
player2: String
player2Pts: int
player1End: boolean
player2End: boolean
started: boolean
completed: boolean
-KW_-cgwIPt5E8lztyd5:
level1: array
....
总结注释:如果使用筛选运算符
equalTo
、startAt
或endAt
构建查询,则应为所选子节点的安全规则添加索引
没有它们,客户端被迫执行相当于“完全扫描”——下载每个孩子,但只报告符合条件的孩子
对于任何不符合应用程序日志的查询,都会为此打印一条警告。或者,如果您试图使用REST API执行相同的查询,它将立即被拒绝。总结评论:如果您使用过滤运算符
equalTo
、startAt
或endAt
构建查询,则应为所选子节点的安全规则添加索引
没有它们,客户端被迫执行相当于“完全扫描”——下载每个孩子,但只报告符合条件的孩子
对于任何不符合应用程序日志的查询,都会为此打印一条警告。或者,如果您尝试使用REST API执行相同的查询,它将立即被拒绝。如何衡量这些方法中每种方法的数据消耗?当您从Firebase数据库中选择数据时,您真的需要每个游戏的所有详细信息吗?或者可能只有那个键/另一个值?你在
started
child上有索引吗?ishmaelMakitla我在android手机上用网络计数器测量数据消耗。vzsg没有,我会尝试做索引,thanksHow你测量每种方法的数据消耗吗?当你从Firebase数据库中选取数据时,你真的需要每场比赛的所有细节吗?或者可能只有那个键/另一个值?你有关于启动的孩子的索引吗?ishmaelMakitla我用安卓手机中的网络计数器测量数据消耗。vzsg没有,我会尝试做索引,谢谢