【问题标题】:Only query a Firestore Document if it has been updated?仅查询已更新的 Firestore 文档?
【发布时间】:2020-06-18 14:06:51
【问题描述】:

假设我有一个简单的文档:

Company
(sub collections)
- employees
(fields)
- name
- address

由于公司中的员工列表可能不会经常更改,因此如果我可以缓存信息并仅在信息发生更改时更新它,它会减少我的读取次数。我知道 Firestore 具有离线持久性,但在 documentation 中并不清楚幕后到底发生了什么。 Firestore 有没有办法自动处理这个问题,还是我需要在每个员工文档中添加一个 last_updated 字段并查询比我的客户上次执行查询更新时间更近的员工?

【问题讨论】:

    标签: firebase google-cloud-platform google-cloud-firestore


    【解决方案1】:

    如果您想查看 Firestore 中的文档是否已从客户端应用程序更新,唯一的方法就是实际阅读它。没有什么可以替代的。离线持久性仅在 Firestore 云服务不可用或您使用 source option 表示您只想查看缓存时才会启动并提供查询。

    您确实可以让客户端查询仅更新 last_updated 字段大于其上次查询时间的文档。请注意,执行该查询仍然需要至少 1 次读取,即使该查询没有产生任何文档,这涵盖了访问基础索引的成本。

    您也可以选择使用 Cloud Functions 触发文档更改,然后使用推送通知告知客户端文档已更新。然后它可以读取该文档以存储在缓存中。

    请记住,如果您过于依赖客户端缓存,则当文档因任何原因(例如,超出其容量)被清除时,您可能会遇到麻烦。当这种情况发生时,什么都不会告诉你,现在你的本地缓存正在提供不完整的结果。为了避免这种情况,您应该拥有自己的完全控制的本地缓存/数据库。

    【讨论】:

    • 我以为您只是在实际从查询中返回文档时才收取阅读费用,而不是查询经过的每个文档,因此分页。
    • 对于任何查询,您至少需要阅读一份文档,即使它没有返回任何文档。否则,您按文件付费。文档:firebase.google.com/docs/firestore/pricing#minimum-charge
    猜你喜欢
    • 1970-01-01
    • 2019-01-07
    • 2018-11-28
    • 2020-01-05
    • 1970-01-01
    • 2020-10-31
    • 2021-11-17
    • 1970-01-01
    • 2019-03-09
    相关资源
    最近更新 更多