Синхронный и асинхронный доступ к базе данных - PullRequest
10 голосов
/ 20 февраля 2012

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

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

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

Ответы [ 5 ]

12 голосов
/ 20 февраля 2012

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

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

4 голосов
/ 20 февраля 2012

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

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

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

1 голос
/ 20 февраля 2012

Как и Ницан, вы должны знать, что «асинхронные запросы не быстрее, чем синхронные, независимо от того, как вы их выполняете, они все равно делают одно и то же».

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

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

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

  • Информация о пользователях
  • Оповещения пользователей
  • Действия пользователей
  • Инвентаризация пользователей ...

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

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

1 голос
/ 20 февраля 2012

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

1 голос
/ 20 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...