【问题标题】:Algolia Firestore Sync - Large Dataset - Rapid ChangesAlgolia Firestore Sync - 大型数据集 - 快速变化
【发布时间】:2021-08-21 23:41:18
【问题描述】:

我正在使用 Algolia 对 Firestore 集合进行全文搜索。从搜索角度来看,它的效果非常好。

我正在使用 Cloud Functions 同步数据 - 遵循许多博文中的模式:我使用 Firestore .onCreate() .onUpdate().onDelete() 挂钩来提示更新 Algolia 索引。

例如

exports.update_products_index = functions.firestore.document('products/{productId}').onUpdate((change) => {
  const algolia_index = client.initIndex("products");
  const newData = change.after.data();
  const objectID = change.after.id;
  return algolia_index.saveObject({ ...newData, objectID });
});

这适用于不频繁的单独更新,但会因频繁更新和/或批量更新而失败(例如,在集合中所有记录的循环中)。这是known issue

Cloud Functions 的 Cloud Firestore 触发器是一项测试版功能,具有 一些已知的限制:

  • 函数最多可能需要 10 秒才能响应更改
  • 云 Firestore。不保证订购。快速变化可以触发 以意外的顺序调用函数。

Firebase 的新 Algolia extension 似乎使用了 same pattern:具体来说,它利用了 Cloud Functions 和 .onWrite() 挂钩。
它似乎也受到同样的限制:当我创建并几乎立即更新大约 3,000 个文档时,并非所有记录都复制到我的 Algolia 索引中,并且几乎没有任何更新被注册。

在这种情况下,即频繁/快速更改大量数据集,是否有办法将 Algolia 与 Firestore 集合同步?或者有没有办法限制这个过程?

【问题讨论】:

    标签: google-cloud-firestore google-cloud-functions algolia


    【解决方案1】:

    由于无法保证执行顺序,因此很难找到编写此特定函数的方法。但我可以为您遇到的问题想出一些解决方法:

    1. 听起来您只是在创建后才快速更新?在这种情况下,可能可行的方法是让您的 create 写入草稿集合,并让您的 update 将更新后的数据复制到可搜索的集合中。
    2. 而不是更新,添加带有时间戳的新文档并在查询时过滤结果。
    3. 如果您的客户可以容忍过时的数据,您可以使用预定功能将所有文档与 Algolia 同步。

    【讨论】:

      猜你喜欢
      • 2016-10-16
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多