Являются ли транзакции Firestore несколькими документами более эффективными, чем обновление каждого документа по одному? - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть два способа пройтись по базе данных и обновить каждый документ. Вот это:

Firestore db = FirestoreClient.getFirestore();
    //get all documents where expiresOn is already passed
    ApiFuture<QuerySnapshot> future = db.collection("devices").whereLessThan("expiresOn", new Date()).get();
    List<QueryDocumentSnapshot> documents = future.get().getDocuments();
    for (DocumentSnapshot document : documents){
        logger.info(document.getId() + " => " + document.getData().toString());
        HashMap<String, Object> data = new HashMap<>();
        data.put("expiresOn", null);
        data.put("boughtUses", 0);
        document.getReference().update(data);
    }

или это:

    ApiFuture<String> transaction = db.runTransaction(
            new Transaction.Function<String>() {
                @Override
                public String updateCallback(Transaction transaction) throws Exception {
                    ApiFuture<QuerySnapshot> future = transaction.get(db.collection("devices").whereLessThan("expiresOn", new Date()));
                    List<QueryDocumentSnapshot> documents = future.get().getDocuments();
                    for (DocumentSnapshot document : documents){
                        HashMap<String, Object> data = new HashMap<>();
                        data.put("expiresOn", null);
                        data.put("boughtUses", 0);
                        transaction.update(document.getReference(), data);
                    }
                    return null;
                }
            }
    );
    logger.info(transaction.get());

Во-первых, я вызываю DocumentReference.update (), а во-вторых, я вызываю Transaction.update (). Я знаю, что DocumentReference.update () вызывается один за другим, но как насчет Transaction.update ()? Это также будет вызываться один за другим, или это будет группировать все записи вместе? Кроме того, если он сгруппирует их, будет ли считаться меньше записей для моего использования?

1 Ответ

0 голосов
/ 07 ноября 2018

Я знаю, что DocumentReference.update () вызывается один за другим

Это верно.

Это также будет вызываться один за другим, или оно собирается сгруппировать все записи вместе?

Он также будет называться один за другим.

Кроме того, если он группирует их, считается ли это меньше записей для моего использования?

Если вы считаете, что записи будут сгруппированы вместе, и вы будете платить только за одну операцию записи, нет, вы будете платить по одной за каждый документ, который вы обновите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...