【问题标题】:Firestore BatchWrite vs TransactionsFirestore BatchWrite 与事务
【发布时间】:2019-07-22 18:20:10
【问题描述】:

在关注此firestore document 之后,很明显批量写入和事务都非常适合对多个操作进行分组。

虽然我不知道什么是我的用例的最佳实践。

这是我的批量写入:

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)
                }
        }

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

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

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    如果没有任何额外的好处,它会变慢。批量写入非常适合您的情况:您想要更新数据库中的多个位置而不进行任何读取。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-12-09
        • 1970-01-01
        • 1970-01-01
        • 2018-07-13
        • 2021-09-28
        • 2018-11-16
        • 2018-03-17
        • 2021-10-19
        • 2018-12-05
        相关资源
        最近更新 更多