#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. Джей — его вопрос в том, что «неудачные записи» также взимаются.