我正在使用适用于Android的Firebase数据库,并且遇到了一些速度问题。检索许多自定义对象时需要很长时间(例如每次1/2 - 1秒)。我正在加载一堆我存储在FB中的Poll对象。
以下是我目前正在为每次投票进行此操作的示例:
pollRef = rootRef.child(getString(R.string.poll_ref)).child(myPollIds.get(polls.size()));
pollRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (isAdded()) {
Poll poll = dataSnapshot.getValue(Poll.class);
我现在正在尝试单独下载我需要使用的民意调查的特定部分。它变得非常复杂。有没有更好的方法只能有效地从数据库中获取部分对象?
提前致谢! :)
答案 0 :(得分:2)
Firebase实时数据库不允许您像希望的那样挑选个别属性。从较大的结构中获取一片数据的最有效方法是将所有相关位复制到一个完整的不同结构中,并请求其他结构。这种重复是典型的优化NoSQL数据库 - 数据通常会根据需要多次复制,以优化应用程序中常见的特定查询。这样做的缺点是当你更新其中一个复制的值时,你需要注意将它复制到它可以存在的所有其他位置。
此数据组织策略的名称称为denormalization。