本日は、Firestore
の不可分操作の一つである、バッチ書き込みを使ってみたいと思います👷♀️
不可分操作(アトミックオペレーション)は、複数の操作を一つの操作として扱うことで、全ての操作が成功、又は失敗するように処理を行うことを指します。Firestore
では、下記の2種類が該当します。
- トランザクション
- 一つ以上のドキュメントで、読み取り・書き込みを行うオペレーション
- バッチ書き込み
- 一つ以上のドキュメントで、書き込みを行うオペレーション
バッチ書き込みを使ってみる
今回は、Kotlin
でバッチ書き込みを行ってみたいと思います。
db.runBatch { it.set(db.collection("users").document(), User()) it.delete(db.collection("users").document("uid")) }.addOnCompleteListener { // TODO: Completion handler. }
バッチ書き込みでは、set()
・update()
・delete()
などを組み合わせて上記のように処理を行うことができます。ちなみに、バッチを実行する場合通常はbatch.commit()
をする必要がありますが、runBatch { }
メソッド内では、下記のように処理の最後に、自動的に書き込みがコミットされます。
@NonNull public Task<Void> runBatch(@NonNull WriteBatch.Function batchFunction) { WriteBatch batch = batch(); batchFunction.apply(batch); return batch.commit(); }
ちなみに、手動でバッチを処理したい場合は、下記のようにWriteBatch
を取得できます。
private val db = Firebase.firestore var batch = db.batch()
てな感じで本日も以上となります🍺
参考
- https://firebase.google.com/docs/firestore/manage-data/transactions?hl=ja#batched-writes
- https://dev.classmethod.jp/articles/firestore-android-batched-writes/