Firebase 减少firestore的读取次数

Firebase 减少firestore的读取次数,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我有一个约会类的应用程序(不支持聊天),其中我向用户显示符合特定条件的所有个人资料列表。我已经为此使用了实时快照侦听器 query.addSnapshotListener(new EventListener<QuerySnapshot>() { @Override public void onEvent(@Nullable QuerySnapshot snapshot,

我有一个约会类的应用程序(不支持聊天),其中我向用户显示符合特定条件的所有个人资料列表。我已经为此使用了实时快照侦听器

 query.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot snapshot,
                                @Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    return;
                }
                if (snapshot != null && !snapshot.isEmpty()) {
                    List<FeedDetails> feedDetailsList = new ArrayList<>();
                    for (DocumentSnapshot document : snapshot.getDocuments()) {
                        FeedDetails feedDetails = document.toObject(FeedDetails.class);
                        feedDetailsList.add(feedDetails);
                    }
                    feedItemAdapter.updateData(feedDetailsList);
                } 

            }
        });
query.addSnapshotListener(新的EventListener(){
@凌驾
public void onEvent(@null QuerySnapshot快照,
@可为空的FireBaseFireStore异常(e){
如果(e!=null){
返回;
}
if(snapshot!=null&&!snapshot.isEmpty()){
List feedDetailsList=新的ArrayList();
对于(DocumentSnapshot文档:snapshot.getDocuments()){
FeedDetails=document.toObject(FeedDetails.class);
feedDetailsList.add(feedDetails);
}
feedItemAdapter.updateData(feedDetailsList);
} 
}
});
在个人档案文档中,我有10-12个字段,其中有一个在线/离线信息字段。所以我们假设,若并没有其他字段发生更改,但某些配置文件的联机/脱机状态发生了更改,那个么侦听器将再次读取该文档。有没有办法减少这些阅读

我有一个10-12字段和一个在线/离线信息字段。因此,假设没有其他字段更改,但某些配置文件的联机/脱机状态更改,那么侦听器将再次读取该文档

在CloudFireStore中,您无法只侦听文档的一组属性而排除其他属性。要么是整个文件要么什么都没有。因此,如果此字段
online=true
更改为
online=false
,则您将获得整个文档

Cloud Firestore侦听器在文档级别启动,并始终返回完整的文档。不幸的是,无法使用客户端SDK仅请求文档的一部分,尽管服务器端SDK的方法中确实存在此选项


如果您不希望得到特定字段的通知,请考虑添加额外的集合,这些文档只包含那些字段。因此,创建一个额外的集合,其中每个文档只包含您不需要的数据。这样,您就不会收到联机/脱机更改的通知。

是否要减少单个属性的读取?是的,我不希望每次有人脱机或联机时都这样做,用户提要将刷新,因为这将导致10-12次读取/配置文件。您还可以查看我的一篇关于的文章。此联机/脱机中最近出现了一个参数,我正在根据该参数对查询进行排序。因此,我猜不可能对此进行单独的收集,否则进行收集将是一个好主意。如果您需要在该属性之后进行查询,那么它应该出现在文档中。但是,您可以查询包含不希望同步的属性的元素的附加集合,然后执行另一个查询以实际从第一个集合获取数据。我已经从文档中删除了在线/离线字段,并制作了子集合文档,该文档将在线和上次查看存档。在这种情况下,我很安全,我不会收到这些更改的通知,但这样做也意味着现在每次用户打开提要时我都必须阅读这两个,因为它们不会被缓存。这就像是在每次读取它们和在这些更改时读取完整文档之间进行选择。因为其他用户可能会多次联机/脱机,所以现在将其放入集合更有意义。你说什么?是的,你说得对。这是非规范化和读取次数之间的权衡。我不能给你建议,因为我不知道你的预算,所以由你决定哪个更好。