假设我有这样的数据存储。
但我只想要username
和profileImage
。在这种情况下我应该使用什么方法?
第一个是两次查询数据。像这样......
usersRef.child(uid).child("username").addValueListener...
String username = dataSnapshot.getValue(String.class);
usersRef.child(uid).child("profileImage").addValueListener...
String profileImage = dataSnapshot.getValue(String.class);
或
第二个是让所有孩子只有一次,只获得我想要的数据。像这样......
- userRef.addValueListener...
User user = new User();
datasnapshot.getValue(user.class)
String username = user.username;
String profileImage = user.profileImage;
答案 0 :(得分:0)
单独调用(在此方案中)的开销相当小。请参阅http://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-social-network-app-by-using-query-instead-of-obse/35932786#35932786。
检索额外数据的开销取决于额外数据的大小。在这种情况下看起来相当大,特别是因为你在那里有嵌套集合。这是Firebase建议展平数据,将所有嵌套集合移动到其自己的顶级节点(userFollowers
,userFollowings
,userNoficationTokens
)的众多原因之一。
为获得最佳性能,您应该有一个包含要在应用中显示的数据的列表。因此,如果您有一个显示用户名+图像列表的屏幕,您应该有一个列表,其中只包含数据库中的数据。在这种情况下,你会发现你正在复制数据,但由于它,你获得了几乎无限的可扩展性。