如何在事务中进行批量写入

时间:2020-04-06 12:52:14

标签: firebase google-cloud-firestore

我发现自己想对数据库执行一些应在单个事务中处理的操作。其中一项操作是注入> 500个文档,因此抛出错误,因为它被击中

每个请求最多可写入500个

要解决此问题,可以使用批量写入,但是我不知道如何在事务中进行批量写入。 transaction.commit()似乎不是问题,在docs事务中,批处理写入似乎是两个独立的概念。

2 个答案:

答案 0 :(得分:0)

您最有可能读过doc

Transaction对象传递给事务的updateFunction 提供在事务内读取和写入数据的方法 上下文。

,并且在客户端SDK中,该对象只有四个方法:get()set()update()delete(),它们都将单个Firestore文档作为参数。

使用Node.js Server SDK for Google Cloud Firestore时,您会注意到还有另一种方法getAll(),它“从Firestore检索多个文档。对所有返回的文档持有悲观的锁”。


因此,在撰写本文时,不可能“混合”交易和批量写入。

答案 1 :(得分:0)

通常来说,我们使用交易来获得一致的数据。您得到的建议:

您可以使用批量写入

这是完全相同的原因。不幸的是,您不能将它们混合在一起。您必须选择一个。现实地说,批处理和事务都用于原子更新。

交易类似于批处理,并且docs指出:

所有操作都成功,或者没有应用任何操作。

批处理写入与事务处理之间的主要区别在于,批处理只是写入而事务在读取后立即写入。

因此您的解决方案是使用Firestore batched-writes一次执行500次操作。