【问题标题】:Execute code in client-side vs google-cloud-function在客户端与 google-cloud-function 中执行代码
【发布时间】:2020-08-03 11:11:50
【问题描述】:

我不得不对我的数据库执行一些写入,这些写入与不同的集合有很多关系,还包括文件上传到 firebase 存储。

此时我问自己,我的客户应该注意我整个应用程序的数据一致性吗?因为实际上我的客户只想执行一个“简单”的操作,尽管在实际上,它涉及多次写入 firestore 并将文件上传到 firebase 存储。

我的问题是:在这种情况下我应该使用 firestore 函数还是继续在我的客户端上执行此代码?

不管答案如何,我也想知道以下几点:

要在数据库上运行多次写入,建议使用批量写入或事务(取决于问题)。 有没有办法在文件上传的同时执行这些批量写入或事务?

提前致谢。

【问题讨论】:

    标签: typescript firebase google-cloud-firestore google-cloud-functions firebase-storage


    【解决方案1】:

    我认为没有“正确”的方法可以做到这一点。 firestore 有一个客户端库,因此您可以使用它。如果你打算构建一个 REST/GraphQl API,你显然应该使用云函数。

    如果不是,那真的取决于数据。如果您需要对其执行大量转换,或者运行一些更复杂的逻辑来确定要读取/写入的数据,您可能需要考虑在客户端使用云功能,因为您将获得一些性能优势并且您将保持领先-end 和后端逻辑分离。同样,没有正确答案,这正是我在客户端和服务器端之间进行选择以运行查询时的想法。

    此外,客户端和服务器 API 之间也存在差异。你可以查看这篇文章:https://medium.com/firebase-developers/should-i-query-my-firebase-database-directly-or-use-cloud-functions-fbb3cd14118c

    关于你的第二个问题,我不知道你说的文件上传是什么意思,

    【讨论】:

    • 就我而言,当我谈到将文件上传到 Firebase 存储时,我指的是将图像上传到 Firebase 存储。
    • 由于这两个 API 都是基于 Promise 的,您可以使用 then 语句链接数据库操作和存储操作。如果您希望或多或少并行运行它们,因为存储和数据库操作都是异步调用的一个接一个的 api 并不意味着它们会同步运行,所以你可以这样做。
    • 是的,但假设我将图像添加到云存储,并将相应的写入添加到我的 firebase firestore。当两个操作都完成上传图像失败时,写入我的 firebase firestore 是成功的。下一步是删除图像,否则数据会出现不一致。我不是在寻找那个。因为我正在寻找的只是一个原子操作。
    • SDK 似乎没有在 firestore/realtime 数据库 API 和存储 API 之间提供任何直接链接。为了实现这种行为,您可以上传文件,然后在第一个承诺解决时写入数据库,或者您可以设置一个云函数,每当文件上传到存储时写入数据库
    • 但是在我看来这仍然是一个问题,因为我们之前谈到了原子性。我认为firebase应该实施一些解决方案。老实说,我不知道如何以一种让我信服的方式来处理这个话题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 2021-11-07
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多