使用Firestore批处理写入的主要原因之一是它们是原子的并确保数据一致性。但是,它们只能进行500次操作。考虑到大型应用程序,可能已在500多个文档中对用户数据进行了非规范化。因此,当用户更新他/她的任何个人资料详细信息时,我必须在所有500多个文档中进行更新,同时保持数据一致性(原子更新)。
一种直观的解决方案是维护一批批次,并跟踪失败的批次,然后手动重试失败的批次。
但是我想问一下:
1)如果有任何最佳做法或其他一些更简单,更可靠的方法来实现此目的,因为考虑到每批操作限制500次操作,大多数商业应用程序都必须面对相同的问题。
2)还有一种更加智能的方法,不仅仅是对数据进行非规范化,因此通过“这种智能方法”,可以首先避免整个数据一致性问题(如上所述)。
答案 0 :(得分:0)
一种直观的解决方案是维护一批批次,并跟踪失败的批次,然后手动重试失败的批次。
这是一个可行的解决方案,您可以继续进行。
1)如果有任何最佳做法或其他一些更简单,更可靠的方法来实现此目的,因为考虑到每批操作限制500次操作,大多数商业应用程序都必须面对相同的问题。
我可以告诉你我做什么。我通常会创建一个计数器变量,并在每次向批处理中添加更新操作时增加其值。然后创建一个if语句,每次增加计数器时,检查它是否达到500。这时,提交当前批次,重置计数器并开始新的批次,从上次中断的地方开始。这样做直到完成所有批量写入。
2)还有一种更加智能的方法,不仅仅是对数据进行非规范化,因此通过“这种智能方法”,可以首先避免整个数据一致性问题(如上所述)。
借助于非规范化不能解决批量写入的问题。复制数据不是解决方案。