Firestore 批量写入与事务

Juv*_*uvi 4 firebase google-cloud-firestore

在遵循这个firestore 文档之后,很明显批量写入和事务都非常适合对多个操作进行分组。

虽然我无法确定我的用例的最佳实践是什么。

这是我的批量写入:

val batch = db.batch()

        val docRef = db.collection(CHATS_COLLECTION).document()
        chat.id = docRef.id

        return Observable.create { emitter: ObservableEmitter<String> ->
            batch.set(docRef, chat)
            batch.update(db.collection(USERS_COLLECTION).document(userId), "chatIds",
                FieldValue.arrayUnion(db.document("$CHATS_COLLECTION/${docRef.id}")))

            batch.commit()
                .addOnSuccessListener {
                    emitter.onNext(docRef.id)
                    emitter.onComplete()
                }
                .addOnFailureListener { e ->
                    emitter.onError(e)
                }
        }
Run Code Online (Sandbox Code Playgroud)

我正在创建新的聊天文档,同时使用批量写入使用新创建的文档更新我的用户文档“chatsIds”数组。

用事务代替批量写入有什么缺点?

pep*_*epe 7

批处理和事务都将以原子方式执行。如果更新文档时不从文档读取数据,则适合批量写入,如果更新文档之前有读取,则适合事务


Gaz*_*kus 5

在没有任何额外好处的情况下,它会变慢。批量写入非常适合您的情况:您希望在没有任何读取的情况下更新数据库中的多个位置。

如果你有读取,那么使用事务是有意义的。在您的情况下,批量写入是正确的选择,因为它运行速度更快。