【问题标题】:Are we charged for failed Firestore transactions我们是否会为失败的 Firestore 交易收费
【发布时间】:2021-01-18 21:26:24
【问题描述】:

如果一个事务读取了 3 个文档,然后成功更新了 2 个文档,但之后的某些事情导致事务失败...即使回滚了 3 次读取和 2 次写入,我是否需要付费?

编辑---

下面的 get() 是否也只需读取 1 次?其中 col2 是 doc1 的子集合。

db.collection('col1').doc('doc1').collection('col2').doc('doc2').get();

编辑 2

firebase 网站声明如下

例如,如果一个事务读取了文档,而另一个客户端修改了这些文档中的任何一个,Cloud Firestore 就会重试该事务。此功能可确保事务在最新且一致的数据上运行。

假设我的事务对 10 个不同的文档执行了 10 次读取。如果这被调用并且在执行期间其他用户更新了一些相同的文档,这将使事务重试,我是否会遇到 10 * Number of retries for my reads?

编辑 3

我在https://firebase.google.com/docs/firestore/transaction-data-contention 阅读了有关交易的更多信息,它指出服务器端交易将锁定文档并等待交易完成。

q1) 由于事务处于锁定状态并且不会一遍又一遍地重试...是否会对具有事务的 firebase 函数进行多次并发调用而不会花费任何额外的读/写,并且这些函数是否会因为锁?

q2) 网页底部还有一个横幅说明

注意:只有服务器客户端库支持写操作后读操作的事务。对于移动/网络 SDK 中的事务,文档读取必须在文档写入之前进行。

我刚刚在我的 firebase 函数上尝试过这个并收到以下错误...

Error: Firestore transactions require all reads to be executed before all writes.
    at Transaction.get (/srv/node_modules/@google-cloud/firestore/build/src/transaction.js:76:19)

我正在使用 firebase 管理版本“^8.8.0”,是否在写入后执行读取,这是在较新版本中添加的功能?

【问题讨论】:

  • 问题有点含糊,因为您提到了Firebase Transaction,这意味着要么保存事务中的所有数据,要么整个事务失败。因此,您所描述的实际上不会发生,就好像任何部分都失败了,整个交易都失败了。见Failed Transaction
  • 我看到了,但它没有提及交易失败前它所做的操作的定价。我会用更多细节更新我的问题
  • 这不是一个坏问题,但对 SO 来说可能不是一个好问题。我认为这更像是一个计费问题,而不是一个编码问题,应该直接联系 Firebase 支持。
  • 是的,也许吧,希望我能从这里的一些 Firebaser 那里得到一些澄清。我已更新以提供更多详细信息,这会有所帮助
  • @jay 我再次更新了问题...错过了文档中的一整页

标签: firebase google-cloud-firestore


【解决方案1】:

如果交易失败,我还会被收费吗?

是的。阅读已完成,因此您需要为此付费。 (我不确定是否有任何“回滚费用” - 因为现在需要撤销更改。)

读取子集文档的成本是多少?

没有读取 doc1 - 因此不会收费。您只需为一次阅读付费。

我在文档中找不到明确的文本,这些答案来自我个人对 Firebase 的使用超过几年。 Firebases 的确认会很有帮助。

【讨论】:

  • 因此,如果事务由于某些内容已更新而失败,它是否可能仅通过重试事务而向我收取 5 次读取费用?因为这似乎非常低效
  • 如果 Firebase 事务的任何部分失败,则整个事务都会失败,因此如果其中一个写入失败,您将无法成功写入。
  • Jay - 他的问题是“不成功的写入”也被指控。
猜你喜欢
  • 1970-01-01
  • 2014-04-14
  • 2014-03-30
  • 2019-03-25
  • 2011-10-29
  • 2017-05-11
  • 1970-01-01
  • 2022-01-15
相关资源
最近更新 更多