У меня есть следующая транзакция с использованием Firestore:
mDb.runTransaction(new Transaction.Function<Void>() {
@Override
public Void apply(final Transaction transaction) throws FirebaseFirestoreException {
DocumentReference documentReference = mDb.collection("collectionOne").document("documentOne");
/*
some code
*/
transaction.update(documentReference, App.getResourses().getString(R.string.field_one), FieldValue.increment(1));
transaction.update(documentReference, App.getResourses().getString(R.string.field_two), FieldValue.increment(1));
return null;
}
}).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d("Debugging", "Transaction correctly executed.");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w("Debugging", "Transaction failure.", e);
}
});
У меня вопрос: при обновлении, например, двух полей одного и того же документа в рамках одной транзакции такая транзакция приведет к чтению одного или двух документов?
when updating, for example, two fields of the same document within the same transaction, will such a transaction yield to one or two documents reads?
Неважно, сколько полей вы измените в документе за одну операцию, вы всегда будете платить за одну операцию записи. Если вы выполняете записи одну за другой, вам будет предъявлено обвинение в двух операциях записи.
Одна транзакция считается одной операцией, если вы изменяете поля в одном и том же документе. В вашем случае транзакция будет стоить вам ровно одну операцию чтения.
Одна транзакция считается одной операцией или суммой обновлений/установок/удалений в ее теле? Другими словами, в коде исходного вопроса транзакция будет тарифицироваться за одно или два чтения?