Когда вы должны использовать транзакции Firebase

Я понимаю, что транзакции Firebase позволяют атомное обновление некоторого значения, учитывая его старое значение и новое значение

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

вот пример:

  • Я понимаю, что если вы выполняете некоторую математическую операцию над значением (добавив "любит" или эквивалент), имеет смысл использовать транзакцию

  • Я не понимаю, имеет ли смысл использовать транзакции в следующем прецеденте: скажем, текстовое поле может быть обновлено любым количеством пользователей, и мы заинтересованы во всех обновлениях, поскольку они происходят в реальном времени, Помогает ли firebase использовать транзакцию в этом случае? Или окончательные "сохраняются операции", которое происходит от значения, ограничиваются только к одному "сохраняются операциями" на временные метки зернистости часов сервера Firebase?

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

Ответы

Ответ 1

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

С любой транзакционной системой: ключ к поддержанию масштабируемости системы - это минимизация количества клиентов, пытающихся обновить одни и те же данные. В случае с Firebase вы достигнете этого, выполнив транзакцию как можно ниже в своем дереве JSON. То есть счетчик является примером того, что может хорошо работать в транзакции.

Для больших фрагментов данных, например, для примера редактирования текста, использование транзакции не будет хорошо масштабироваться. Для таких прецедентов лучше всего найти способ избежать конфликта вообще. Довольно часто это сводится к хранению дельта, которое делает каждый пользователь, вместо сохранения обновленного состояния. Отличным примером этого является пример Firepad, который использует операционное преобразование для создания высококонкурентного совместного редактора поверх базы данных Firebase.