【问题标题】:Firestore -- Get only the changed documents in a large synced collectionFirestore - 仅获取大型同步集合中的更改文档
【发布时间】:2020-09-30 12:36:59
【问题描述】:

我已阅读以下所有问题,但在文档中找不到任何内容来描述如何同步集合并从集合中接收已更改的文档。我的同步集合中有 500 多个文档(使用 redux-saga-firebase syncCollection),但通常只有大约 100 个文档会更改。在任何给定时间,甚至更少会发生变化,但我目前正在获取所有 500+ 个文档,即使一个文档发生更改,也会导致 500+ 次读取。不理想,而且会大量花费我。

这是我使用 redux-saga-firebase 的代码,但一个普通的 firebase 代码答案也足够了。如何获得同步响应,发送集合中已更改的文档?

export function* getPlayersFromDb() {
  yield fork(
    rsf.firestore.syncCollection,
    'players',
    { successActionCreator: response => ({
            type: t.GET_PLAYERS_FROM_DB_SUCCESS,
            payload: [...response],
        }),
        failureActionCreator: () => ({
            type: t.GET_PLAYERS_FROM_DB_FAILURE,
            payload: [],
        }),
        transform: response => messageTransformer(response),
    }
);

}

Does Firestore sync only diff?

Realm syncing with large collection on Firestore - architectural questions / issues

How to avoid unnecessary Firestore reads with Cache

What exactly does Firestore synchronization do?

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    这是一篇很好的文章,解释了一些技巧。

    这里的策略是从 Firebase 客户端缓存中为每个文档添加一个属性,例如 lastModified.get(),并且只查询服务器以获取 lastModified 大于客户端缓存文档获取时间戳的文档。

    https://medium.com/firebase-tips-tricks/how-to-drastically-reduce-the-number-of-reads-when-no-documents-are-changed-in-firestore-8760e2f25e9e

    【讨论】:

      【解决方案2】:

      Firestore 查询没有“仅查询已更改的内容”的概念。您将需要自己创建该概念。执行此操作的常用方法是在每个文档中记录其上次更新时间的时间戳,然后使用范围过滤器中的该字段仅获取自收到最新更新以来更新的文档。您将需要在客户端中跟踪最新的更新时间戳。一种可能性是使用迄今为止在任何文档中看到的最大时间戳。

      【讨论】:

      • 道格,感谢您一如既往的帮助。您的建议是否适用于同步数据,还是仅适用于 get-where 查询?我不希望用户需要发起请求。
      • 我不确定你在问什么。查询来自哪里并不重要。它只需要有正确的过滤器来询问更新日期大于上次查看日期的文档。
      • 我当前的实现不需要从客户端发送任何东西(比如时间戳)。当数据库数据发生变化时,它只是推送集合。您是否建议我在我的 syncCollection 查询中添加范围过滤器?或者这种方法行不通,我基本上需要在客户端设置轮询?
      • 是的,向查询中添加过滤器。您仍然可以实时收听结果。
      猜你喜欢
      • 2018-04-09
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 2020-08-01
      • 2019-10-06
      • 2022-01-21
      相关资源
      最近更新 更多