Удаление игроков «keepSynced» будет локально кэшировать информацию для «матчей». Могу ли я поверить, что при этом в игре будет не более 2 игроков? * Транзакции, как предполагается, позволяют избежать подобных проблем.
При отключенном KeepSynced транзакции все равно будут попадать в локальный кеш, а затем - inte rnet. Это, вероятно, сэкономит вам некоторую пропускную способность, так как это ленивый доступ (при условии, что вы не делаете что-то вроде «получить все совпадения»), и вы сможете дать необходимые гарантии. Независимо от того, используете ли вы KeepSynced, вы должны быть готовы к тому, что ваша транзакция будет выполняться несколько раз (и с нулевыми данными, если локальный кэш пуст).
Есть ли способ избежать локального кэша для запрос и, следовательно, всегда получать обновленные данные?
Исправление
Похоже, я получил немного назад, см. этот ответ Больше подробностей. Он вернет значение cached и запросит обновленное значение. Последующие звонки получат новое значение, когда оно станет доступным. Вы всегда должны пытаться использовать ValueChanged
, когда это возможно.
старый ответ:
You _can_ just say `GetValueAsync`, which has to bypass the cache since it will only fire once. You really should use ValueChanged listeners to listen for changes and Transactions to change data if you can to keep everything up to date and to avoid data races.
Может ли лучшее решение быть переместить игры на другой узел, чтобы уменьшить размер узла «спичек»?
Как правило, чем меньше людей обращаются к общему ресурсу, тем выше ваша производительность. Если вы еще этого не сделали, посмотрите сообщение Loteria , чтобы узнать, как команда создала игру в реальном времени на базе данных реального времени, которая была достаточно устойчивой, чтобы быть Google Doodle.
TLDR заключается в том, что вместо того, чтобы отвечать за создание или поиск игры, игроки, ищущие игры, записываются в очередь. Когда игрок добавляется в очередь для организации матчей, запускается Облачная функция , которая выполняет работу по подключению пользователей. Клиент знает, что он в игре, помещая слушателя ValueChanged в запись игрока в базе данных и ожидая, когда в него будет записана игра.
В игре также сохраняются низкие задержки с некоторым ручным разбиением. логи c. Они выполнили некоторое профилирование, чтобы увидеть, сколько трафика может обработать c отдельная база данных, а затем написать несколько быстрых (вручную - так как это было когда-то) логи масштабирования c для распределения игроков по одной из нескольких баз данных.
Надеюсь, что все поможет!
- Патрик