Firebase Functions 系统设计 - Cloud Firestore 触发器或 HTTP 触发器
Firebase Functions System Design - Cloud Firestore Trigger or HTTP Trigger
我目前正在开展一个项目,我正在利用 Algolia 的全文搜索功能以及我的 Firestore 用户集合。目标是让 Algolia 近乎完美地代表我的用户集合,减去任何个人身份信息。我有一个可行的解决方案,但我不确定我的实施是否尽可能干净。
问题源于我的功能,当对我的应用程序执行各种操作时,这些功能会更新用户。这是一个人为的例子来说明我的观点:
当用户注册时,他们会提供他们的全名。然后,他们的数据被发送到用户集合,在该集合中触发 Firestore.onCreate 触发器,将 fullName 拆分为 firstName 和 lastName,并更新文档。然后我有一个 Firestore.onUpdate 触发器,它取出所有 PII 并将该版本发送到 Algolia。问题(我想?)是我现在已经为一个用户操作向 Algolia 发送了两个操作,即使我们知道第一个操作 (fullName) 稍后会有第二个操作 (firstName & lastName)。 (让我们假设这是大规模发生的,成本是一个问题)
是否有推荐的方法来处理这些类型的场景:更新有副作用也需要发送更新?想到的第一件事是在 onUpdate 触发器中有逻辑来决定更改是否值得发送到 Algolia,但这很快就会把一个简单的操作变成一个垃圾操作。我想更好的方法是将 Firestore.onChange 触发器转换为基本的 HTTP 触发器,只有当我真正关心更改数据时才会触发它,但不知道这是否是我缺乏理解的创可贴。非常感谢对此的任何指导!
The first thing that comes to mind is to have logic in the onUpdate trigger that decides whether the change is worth sending to Algolia or not, but that quickly turns a simple operation into a garbage one.
这实际上很常见,甚至是正确处理修改它们触发的同一文档的 onUpdate 触发器所必需的。
I imagine a better approach would be to convert the Firestore.onChange trigger to a basic HTTP Trigger that I fire only when I actually care to change the data
这也很常见。
您在这里真正拥有的是偏好问题。这两种方法都不正确。选择最符合您需求和偏好的一款。
我要指出的是,您的客户端应用程序可以在离线时写入文档,并最终与服务器同步,并触发触发器。 HTTP 触发器显然不能脱机工作,因此您必须编写代码以从客户端重试,这可能很难做到正确。
我目前正在开展一个项目,我正在利用 Algolia 的全文搜索功能以及我的 Firestore 用户集合。目标是让 Algolia 近乎完美地代表我的用户集合,减去任何个人身份信息。我有一个可行的解决方案,但我不确定我的实施是否尽可能干净。
问题源于我的功能,当对我的应用程序执行各种操作时,这些功能会更新用户。这是一个人为的例子来说明我的观点:
当用户注册时,他们会提供他们的全名。然后,他们的数据被发送到用户集合,在该集合中触发 Firestore.onCreate 触发器,将 fullName 拆分为 firstName 和 lastName,并更新文档。然后我有一个 Firestore.onUpdate 触发器,它取出所有 PII 并将该版本发送到 Algolia。问题(我想?)是我现在已经为一个用户操作向 Algolia 发送了两个操作,即使我们知道第一个操作 (fullName) 稍后会有第二个操作 (firstName & lastName)。 (让我们假设这是大规模发生的,成本是一个问题)
是否有推荐的方法来处理这些类型的场景:更新有副作用也需要发送更新?想到的第一件事是在 onUpdate 触发器中有逻辑来决定更改是否值得发送到 Algolia,但这很快就会把一个简单的操作变成一个垃圾操作。我想更好的方法是将 Firestore.onChange 触发器转换为基本的 HTTP 触发器,只有当我真正关心更改数据时才会触发它,但不知道这是否是我缺乏理解的创可贴。非常感谢对此的任何指导!
The first thing that comes to mind is to have logic in the onUpdate trigger that decides whether the change is worth sending to Algolia or not, but that quickly turns a simple operation into a garbage one.
这实际上很常见,甚至是正确处理修改它们触发的同一文档的 onUpdate 触发器所必需的。
I imagine a better approach would be to convert the Firestore.onChange trigger to a basic HTTP Trigger that I fire only when I actually care to change the data
这也很常见。
您在这里真正拥有的是偏好问题。这两种方法都不正确。选择最符合您需求和偏好的一款。
我要指出的是,您的客户端应用程序可以在离线时写入文档,并最终与服务器同步,并触发触发器。 HTTP 触发器显然不能脱机工作,因此您必须编写代码以从客户端重试,这可能很难做到正确。