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