这个问题与this one类似,但是由于我的声誉不高,所以我无法回答任何答案。所以我改为创建一个新问题。
我是Flutter和Firebase的新手。请多多包涵.. 我打算将我的应用程序从另一个数据库移至Firestore。
因此,我有一个3K文档集合,每个文档中都包含图像信息和最新的更新时间戳。 问题是应用程序每次启动时(如果相隔30分钟),它将读取整个3K文档,并显示在我的Firebase控制台中。 在我的测试过程中,普通用户每天会导致大约8K-10K的新读取!即使使用分页,它也会一遍又一遍地重复读取相同的数据,并且仍然算作新读取。 但是,如果我禁用了网络,那么即使一天之后,该应用实际上仍能够从缓存中获取数据,而无需重新连接到Firestore。
每天添加大约4张图片,因此每次加载时读取整个3K文档都没有意义。
我看到了一些使用本地数据库的解决方案。但是,如果我需要另一个本地数据库,使用Firestore有什么意义呢?我希望我不需要这样做。
所以我有一个主意,但是我被卡在某处..该方法是将最新更新存储在SharedPreferences中,并且仅获取自最新更新以来存储在缓存中的文档。但是我被困在这里,希望有人能帮助我:
如何在Flutter中禁用Firestore网络并仅从缓存中读取?我怎么知道它来自缓存?
如何更新缓存中的数据?因为如果我这样做:
Firestore.instance.collection('images')。where('last_update',isGreaterThan:lastUpdateInCache).snapshots();
这将仅显示最新更新之后的快照。我应该将列表与旧列表合并吗?但是我不想将列表连接起来,因为那将意味着我需要复制数据,这会占用大量内存。
Firestore是否具有我不知道要解决的功能?
谢谢..我是一个业余爱好者,所以任何答复都将不胜感激。
答案 0 :(得分:0)
因此,最后经过高低寻找之后,除了将数据持久保存在本地数据库中之外,目前显然没有其他解决方案。 因为: 1. 30分钟不活动后,将重新读取所有已阅读的文档。 2.离线和在线模拟非常麻烦。
所以最后我的解决方案是: 1.使用Sembast作为本地数据库(到目前为止非常好)来保留数据。 2.在Firestore中创建一个文档以存储最新更新信息,并且仅收听该1个文档。如果有更改,请使用从本地数据库中的最新数据开始的新数据更新本地数据库
如果有人有更好的答案,请仍然在此处发表评论。谢谢社区!