【问题标题】:Firestore reduce readsFirestore 减少读取
【发布时间】:2021-11-23 23:12:27
【问题描述】:

我想减少从 FireStore 的读取。如果在添加新数据时,它应该只获取该数据。我不希望它再次读取整个数据库。我认为这将是不必要且昂贵的。 我尝试了下面的代码,但它不起作用,它没有提取任何数据

https://medium.com/firebase-tips-tricks/how-to-drastically-reduce-the-number-of-reads-when-no-documents-are-changed-in-firestore-8760e2f25e9e

    query.get(CACHE).addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {
                boolean isEmpty = task.getResult().isEmpty();
                if (isEmpty) {
                    query.get(SERVER).addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<QuerySnapshot> task) {
                            for (QueryDocumentSnapshot documentSnapshot : task.getResult()) {
                                Item item= documentSnapshot.toObject(Item.class);
                                items.add(item);
                                adapter.notifyDataSetChanged();
                            }

                        }
                    });
                }
                }
        }
    });

当我尝试其他方法时,离线时读取内存中的数据,但在线时重新加载所有数据库。 提前感谢您的任何建议。

                query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                         for (QueryDocumentSnapshot documentSnapshot : task.getResult()) {
                                Item blogPost = doc.getDocument().toObject(Item.class);
                                items.add(blogPost);
                                mAdapter.notifyDataSetChanged();
                         }
                        
                    }
                });

【问题讨论】:

    标签: java firebase google-cloud-firestore


    【解决方案1】:

    当您使用 get() 调用时,您总是会从 Firebase 服务器获取文档的在线版本。如果你只想获得新的东西,你应该考虑tracking the changes between snapshots。这样就可以只获取特定操作对应的数据了。

    但请记住,您无法跳过初始数据。我也回答了一个关于这个话题的问题:

    【讨论】:

    • Snapshotlistener 无法正常工作。断开连接或退出应用程序时重新加载所有数据库。我试着按照你的文章做。你能显示代码示例吗?谢谢你的回答
    • 您从那篇文章中究竟尝试了什么,但没有按您预期的方式工作?
    • 嘿凯维德。如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我真的很感激。谢谢!
    猜你喜欢
    • 2021-04-04
    • 2021-06-08
    • 2021-05-22
    • 2019-02-01
    • 2020-03-31
    • 2019-12-29
    • 1970-01-01
    • 2019-10-22
    • 2020-06-07
    相关资源
    最近更新 更多