Синхронный и асинхронный доступ к базе данных

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

Мне интересно, действительно ли нужно делать запросы к базе данных в async. Его боль для кода, и все мои функции должны будут использовать обратные вызовы вместо чистого метода return. Это нормальный подход?

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

Ответ 1

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

Node.JS действительно построен для потока событий, зависящего от async, вы получите гораздо лучшую производительность, работая с ним, чем работая над ним.

Ответ 2

Асинхронный запрос не быстрее, чем синхронный, независимо от того, как вы их делаете, они по-прежнему делают то же самое. Единственное, что меняется, скорее, вы блокируете по запросу или нет.

Когда вы идете синхронно, метод, который сделал запрос, прекратит его выполнение, ожидая возврата запроса, только когда он пройдет, он продолжит свое выполнение. Хотя при использовании асинхронного запроса нет необходимости ждать завершения запроса, вы можете продолжать, и когда это будет сделано, будет вызван обратный вызов.

Другое дело, что обычно база данных является узким местом, когда приложение делает много вызовов в dbms, из-за этого вы можете рассмотреть возможность использования типа кэширования для уменьшения загрузки из dbms.

Ответ 3

Скорость движка базы данных + время передачи будет практически одинаковым. Проблема в том, что асинхронные вызовы не блокируют вызывающего абонента. Таким образом, асинхронная арка - это путь для любых систем "реального времени", которые должны реагировать на другие входы. (Такие, как игры, которые всегда должны быть очень отзывчивы к человеку.)

Ответ 4

Запросы будут помещены в очередь на уровне базы данных в MySQL. Есть много вариантов, если вы можете подумать об использовании Mongo DB для некоторых ваших данных.

Ответ 5

Как и Ницан, вы должны знать, что "Асинхронный запрос не быстрее, чем синхронный, независимо от того, как вы их делаете, они по-прежнему делают то же самое".

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

Создание файлов кеша

И обновите их действиями пользователей или задачами CRON.

  • Информация для пользователей
  • Пользователи предупреждают
  • Действия пользователей
  • Пользователи инвентаризации...

Процесс хранения базы данных

Для некоторых повторяющихся запросов вы можете хранить их в MySQL. Они будут выполняться быстрее, чем запрос пользователя.