Взимается ли с нас плата за неудачные транзакции Firestore

#firebase #google-cloud-firestore

#firebase #google-облако-firestore

Вопрос:

Если транзакция считывает 3 документа, а затем успешно обновляет 2 документа, но что-то после этого приводит к сбою транзакции… будет ли с меня взиматься плата за 3 чтения и 2 записи, которые были выполнены, даже если они были откатаны?

Редактировать—

Также будет ли get() ниже стоить только 1 чтение? Где col2 — это вложенная коллекция doc1.

 db.collection('col1').doc('doc1').collection('col2').doc('doc2').get();
  

Редактировать 2

На веб-сайте firebase указано следующее

Например, если транзакция считывает документы, а другой клиент изменяет какой-либо из этих документов, Cloud Firestore повторяет транзакцию. Эта функция гарантирует, что транзакция выполняется на основе актуальных и согласованных данных.

Скажем, моя транзакция выполняет 10 операций чтения в 10 разных документах. Если это будет вызвано и во время выполнения некоторые из тех же документов будут обновлены другими пользователями, что приведет к повторению транзакции, будет ли у меня 10 * Количество попыток для моих чтений?

Редактировать 3

Я прочитал больше о транзакциях здесь https://firebase.google.com/docs/firestore/transaction-data-contention и в нем указано, что транзакции на стороне сервера заблокируют документы и будут ждать завершения транзакции.

q1) Поскольку транзакция блокируется и не повторяется снова и снова… не будет ли несколько одновременных вызовов функции firebase с транзакцией стоить дополнительных операций чтения / записи, и выполнение функций займет больше времени из-за блокировки?

q2) На веб-странице также есть баннер внизу с указанием

Примечание: только клиентские библиотеки сервера поддерживают транзакции с операциями чтения после операций записи. Для транзакций в мобильных / веб-SDK чтение документа должно предшествовать записи документа.

Я только что попробовал это в своей функции firebase и получил следующую ошибку…

 Error: Firestore transactions require all reads to be executed before all writes.
    at Transaction.get (/srv/node_modules/@google-cloud/firestore/build/src/transaction.js:76:19)
  

Я использую firebase admin версии «^ 8.8.0», выполняет ли чтение после записи функция, которая была добавлена в более новых версиях?

Комментарии:

1. Вопрос немного расплывчатый, поскольку вы упоминаете транзакцию Firebase , которая означает либо сохранение всех данных в транзакции, либо сбой всей транзакции. Итак, то, что вы описываете, на самом деле не может произойти, поскольку при сбое какой-либо части происходит сбой всей транзакции. См. раздел Неудачная транзакция

2. Я вижу это, но в нем ничего не говорится о ценах за действия, которые он выполняет до сбоя транзакции. Я обновлю свой вопрос с более подробной информацией

3. Это неплохой вопрос, но, возможно, не очень хороший вопрос для SO. Я думаю, что это скорее вопрос выставления счетов, чем вопрос кодирования, и его следует направлять в службу поддержки firebase.

4. Да, может быть, надеюсь, я мог бы получить некоторые разъяснения от некоторых из firebasers здесь. Я обновил, чтобы получить более подробную информацию о том, как это помогает

5. @jay Я снова обновил вопрос… Пропустил целую страницу в документах

Ответ №1:

Если транзакции завершатся неудачно, будет ли с меня по-прежнему взиматься плата?

ДА. Чтение было завершено, поэтому с вас взимается плата за него. (Я не уверен, есть ли какие-либо «сборы за откат», поскольку теперь изменение должно быть отменено.)

Какова стоимость чтения документа вложенной коллекции?

Документ1 не был прочитан, поэтому он не будет взиматься. С вас взимается плата только за одно чтение.

Я не смог найти четкий текст в документации, и эти ответы взяты из моего личного использования Firebase более пары лет. Подтверждение Firebasers было бы полезно.

Комментарии:

1. Итак, если транзакция завершается с ошибкой из-за того, что что-то обновилось, может ли это потенциально взимать с меня 5 чтений только за повторную попытку транзакции? Поскольку это кажется ужасно неэффективным

2. Если какая-либо часть транзакции Firebase завершается с ошибкой, вся транзакция завершается с ошибкой, поэтому вы не сможете выполнить успешную запись, если одна из операций записи завершится с ошибкой.

3. Джей — его вопрос в том, что «неудачные записи» также взимаются.