我正在使用适用于 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);
我现在正在尝试单独加载下载我需要使用的投票的特定部分。它变得相当复杂。有没有更好的方法可以有效地只从数据库中获取部分对象?
提前致谢! :)
最佳答案
Firebase 实时数据库无法让您像您希望的那样挑选个别属性。从更大的结构中只获取一部分数据的最有效方法是将所有相关位复制到一个完全不同的结构中,然后请求另一个结构。这种复制对于优化的 NoSQL 数据库来说是典型的——数据通常会根据需要多次复制,以针对应用程序中常见的特定查询进行优化。这样做的缺点是,当您更新其中一个复制值时,您需要注意将其复制到它可能存在的所有其他位置。
这个数据组织策略的名称叫做denormalization .
关于Android Firebase 数据库加载更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41927215/