复用同一Firebase Firestore变量执行多数据库操作是否可行?
复用Firebase Firestore变量是否可行?会不会破坏事务?
问题描述
原本为每个数据库操作使用不同的变量,为简化代码,想复用同一个Firebase Firestore变量,代码示例如下:
private var db = Firebase.firestore db.collection("Classes").document("ClassID").get(resource) .addOnSuccessListener { }.addOnFailureListener { } db.collection("Teacher").document("TeacherID").set(resource2) .addOnSuccessListener { }.addOnFailureListener { } db.collection("Students").document("StudentID").get(resource3) .addOnSuccessListener { }.addOnFailureListener { }
请问这样操作是否可行,是否会破坏数据库事务?
回答
- 这种做法完全可行,甚至是Firebase官方推荐的最佳实践之一。Firestore的核心实例(即你定义的
db)本身就是设计为可复用、线程安全的,多个并发的读写操作共用同一个实例不会产生任何冲突或数据异常。 - 你的代码里的三个操作都是独立的单次读写请求,本身就不属于「事务」范畴——Firestore事务特指需要原子性执行的多操作集合(比如要同时更新多个文档,确保要么全部成功要么全部失败),所以不存在「破坏事务」的说法。
- 如果后续需要实现事务逻辑,依然可以复用这个
db变量,通过db.runTransaction()方法来包裹事务内的操作即可,复用实例不会对事务的原子性造成影响。
内容的提问来源于stack exchange,提问作者Carye James Adelante
相关产品推荐
相关产品推荐

