除非禁用脱机持久性,否则Firestore会对大型集合进行慢查询

Jef*_*ett 4 android firebase google-cloud-firestore

我正在使用Firestore Recycler Adapter绑定到firestore中的大型集合的查询.

据我了解GitHub中的文档,Firestore Recycler Adapter使用.addSnapshotListener(),而不是.get()方法.

该系列有5,000个文件,其中我将限制为100个.

Query query = fsDB.collection("Users").document(user_id).collection("posts")
.orderBy("date_created).orderBy("topic").limit(100);
Run Code Online (Sandbox Code Playgroud)

现在,当我连接到Internet并且启用了脱机持久性时,此查询在调用onDataChanged()之前平均需要90秒.我认为这是因为回收者从设备上的内存或缓存中获取数据,然后在从网络获取数据之前对其进行排序(!).

因为,当禁用脱机持久性时,查询只需要2-3秒.

如何在启用脱机持久性的同时更快地使用此查询?或者是否有一种方法可以使侦听器在搜索内存/缓存之前访问网络索引?

就像是...

FirestoreRecyclerOptions<Reed> options = new FirestoreRecyclerOptions.Builder<>()
.setQuery(query, Reed.class)
.setFirst(FirebaseFirestore.getInstance fsDB);
Run Code Online (Sandbox Code Playgroud)

客户端的firestore索引不可用吗?

使用firestore 15.0.0,Android设备

Dou*_*son 6

离线查询未像应用程序在线时那样进行优化.快速查询是Firestore后端的一项功能,在离线时显然不可用.

另请参阅:Firestore作为脱机持久性机制的可靠性如何?

  • 好的...感谢您回答我问题的最后部分(firestore 索引在客户端不可用)。你能回答问题的第一部分吗?在线时,启用持久性后,为什么此查询平均需要 90 秒,而我只返回 100 个项目? (2认同)