我发现自己想对数据库执行一些应在单个事务中处理的操作。其中一项操作是注入> 500个文档,因此抛出错误,因为它被击中
每个请求最多可写入500个
要解决此问题,可以使用批量写入,但是我不知道如何在事务中进行批量写入。 transaction.commit()
似乎不是问题,在docs事务中,批处理写入似乎是两个独立的概念。
答案 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次操作。