Firestore批处理 – 需要多于1个写操作的操作

huangapple go评论93阅读模式
英文:

Firestore batch - actions which requires more than 1 write

问题

TL;DR - 我们在使用Firestore的批量写入操作时,发现当将一个使用Firestore的serverTimestamp特性的对象添加到批处理中时,会产生2次写入操作而不是1次。目前没有找到相关的文档说明。问题在于,如果在代码中使用本地计数器来包装Firestore批处理,以避免达到500的限制,可能会错误计算批处理大小。

我的问题是 - 是否还有其他特殊的Firestore值/操作等需要进行多次批处理写入操作的情况?还有谁能提供解决这个问题的方法?

英文:

TL;DR -
There are conventions/payloads/actions out there, which requires more than 1 batch write to take place.

It occur to me that when im adding a set operation to a batch, for an object which is using firestore serverTimstamp feature, it costs 2 write operations rather than 1.
Could not find any documentation about that.
The problem is, that if you wrap firestore batch with a local counter in your code, to avoid reaching the 500 threshold, you might miss-calculate batch size.

In my example, I am using Golang firestore sdk (but I do believe this issue will be common for all other sdk's because it derives from firestore fundamental mechanism)

batch.Set(ctx, docRef, struct {
	LastUpdate time.Time `firestore:"lastUpdate,serverTimestamp"`
}{}, firestore.MergeAll)

--> batch.writes was increased by 2 writes rather than 1

My question is - are any other special firestore values/actions etc' which might also require more than 1 batch write operation to take place?
Also do anyone can suggest a workaround for that issue?

答案1

得分: 2

所谓的字段转换操作确实可能需要在服务器上进行多次写操作,从而降低了您在批量写入或事务中执行的逻辑写入操作的能力。如果我记得正确的话,在这种情况下,您只会被收费一次写操作。

根据我之前在https://stackoverflow.com/questions/70764076/what-is-field-transformations-in-firestore 上给出的答案,可用的字段转换操作包括setToServerValue(您使用的服务器时间戳)、incrementappendMissingElementsremoveAllFromArraymaximumminimum。我不确定最后两个是否已在任何SDK中公开。

英文:

So-called field transform operations indeed may require more than one write operation on the server, reducing the capacity of logical write operations you can perform in a batched write or transaction. If I recall correct, you only be charged for one write operation in such cases though.

From the answer I gave before to https://stackoverflow.com/questions/70764076/what-is-field-transformations-in-firestore, it seems that the field transform operations that are available are setToServerValue (the server timestamp you use), increment, appendMissingElements, removeAllFromArray, maximum and minimum. I'm not sure if the last two are exposed on any SDK yet.

huangapple
  • 本文由 发表于 2022年9月15日 21:22:30
  • 转载请务必保留本文链接:https://go.coder-hub.com/73731935.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定