2017-06-05 55 views
0

假设我有这样的数据存储。两次得到两个孩子并一次得到所有孩子有什么区别?

Firebase database

,但我只想要usernameprofileImage。我应该为这种情况使用什么方法?

第一个是两次查询数据。事情是这样的......

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

单独调用的开销(在这种情况下)是相当小的。见http://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-social-network-app-by-using-query-instead-of-obse/35932786#35932786

检索额外数据的开销取决于额外数据的大小。在这种情况下似乎相当大,特别是因为你有嵌套集合在那里。这是Firebase建议展平数据的众多原因之一,将所有嵌套收藏移至其自己的顶级节点(userFollowersuserFollowingsuserNoficationTokens)。

为了获得最佳性能,您应该有一个包含数据的列表,以便在应用中显示。因此,如果您有一个显示用户名和图像列表的屏幕,则应该在数据库中包含一个仅包含该数据的列表。在这种情况下,你会发现你正在复制数据,但由于它的存在,你几乎获得了无限的可扩展性。

相关问题