firebase - 如何减少一次又一次的firebase数据库查询?
问题描述
我目前正在 Flutter 中开发一个使用 Firebase 作为后端的电子商务应用程序。我对 Cloud Firestore 有一些担忧和困惑,因此我需要您的帮助。
我面临的一些问题是:
- 假设我的收藏中有 1000 种产品,当用户运行并滚动浏览应用程序时,我逐渐想要加载这些产品,问题是每次用户退出并再次运行应用程序时,再次调用数据库以获得相同的数据我已经服务并最终花费了我更多的阅读量。
我不知道如何处理这种情况,也找不到合适的解决方案。
我想要一种方法来加载产品一次并将其保存在用户的内存中,以便下次用户运行应用程序时,首先它尝试从缓存中加载,在查询之后,服务器获取更多数据并再次保存到缓存。
我只希望应用程序仅在数据库中有一些更改时才侦听和更新缓存,例如我更改价格或产品名称时。我不想每次用户运行应用程序时都获取。
我的简单问题是在 Flutter 中管理这种情况的有效方法是什么?请帮助我并就这个问题提供一些指导。
如果您认为有任何视频或博客文章可以帮助我解决这种情况,请同时提及。
解决方案
这就是我通常做的。
在数据库中保存一个整数变量,指示数据的版本,例如:
版本 = 1
每次重新打开应用程序时,从数据库中读取版本,如果与用户设备本地保存的版本不同,则从在线数据库中重新加载数据。
要在 Flutter 中本地保存数据,您可以使用Hive(非常高性能)或Postgres(适合进行查询,但速度稍慢)之类的数据库
此外,在滚动产品时,如果它们尚未离线保存,请将它们添加到数据库中。
由于数据很多,即使更新一个,也会再次从数据库中下载所有数据。如果您不想从数据库中读取所有内容,而不是保存一个整数变量,您可以保存一个包含添加或修改的产品 ID 的数组,并在保存数据时通过清空数组来仅查询后者
推荐阅读
- qt - QML ColumnLayout 不尊重 minimumHeight
- css - 在 CSS 中,选择器“.class a”中的“a”是什么意思?
- mongodb - 从与数组上的查询条件匹配的第一个元素中投影特定字段
- react-native - React Native GraphQL 嵌套数据数组返回错误
- javascript - 将 JavaScript 数组转换为逗号和引号分隔的字符串列表的简单方法?
- python - 用于过滤仅具有名称和标签值的 describe_images 函数的 Aws lambda 函数
- c - C 是否有 HTTP2 的标准库
- cdn - 重新验证缓存更新填充到所有 POP 时 CDN 是否过时?
- amazon-web-services - 在 AWS 上的何处存储多个访问令牌?
- docker - 我们如何将两个工具划分为通过标准输入标准输出进行对话的微服务