我目前正在进行一个项目,在该项目中,我将利用Algolia的全文搜索功能和我的Firestore用户集合。目标是让Algolia作为我的用户集合的近乎完美的代表,减去任何个人身份信息。我有一个有效的解决方案,但我不确定我的实现是否干净
这个问题源于我的功能,当对我的应用程序执行各种操作时,这些功能会更新用户。这里有一个人为的例子来说明我的观点:
当用户注册时,他们会提供自己的全名。然后,他们的数据被发送到Firestore.onCreate触发器触发的用户集合,将fullName拆分为firstName和lastName,并更新文档。然后我有一个Firestore.ounUpdate触发器,它取出所有的PII并将该版本发送到Algolia。问题是(我认为?(我现在已经向Algolia发送了两个操作,用于一个用户操作,尽管我们知道第一个操作(fullName(稍后会有第二个操作(firstName&lastName(。(让我们假设这是大规模发生的,成本是一个问题(
有没有一种建议的方法来处理这些类型的场景:更新有副作用,也需要发送更新?首先想到的是在onUpdate触发器中有一个逻辑,它决定是否值得将更改发送到Algolia,但很快就会将简单的操作变成垃圾操作。我想一个更好的方法是将Firestore.onChange触发器转换为一个基本的HTTP触发器,只有当我真正想更改数据时,我才会触发它,但不知道这是否是我缺乏理解的一个障碍。如有任何指导,我们将不胜感激!
首先想到的是在onUpdate触发器中有一个逻辑来决定是否值得将更改发送到Algolia,但它会迅速将简单的操作变成垃圾操作。
这实际上有点常见,甚至是正确处理onUpdate触发器所必需的,这些触发器修改了它们触发的同一文档。
我认为更好的方法是将Firestore.onChange触发器转换为基本的HTTP触发器,只有当我真正想要更改数据时才会触发
这也很常见。
你在这里真正拥有的是一个偏好问题。这两种方法都不正确。选择最符合您需求和偏好的。
我要指出的是,您的客户端应用程序可以在脱机时编写文档,并最终与服务器同步,从而触发触发器。HTTP触发器显然无法脱机工作,因此您必须编写代码才能从客户端重试,这可能很难纠正。