PDA

Просмотр полной версии : [Вопрос] mysql_query или mysql_function_query



Glant
12.11.2015, 21:10
Перевел мод на MySQL R9-3, и использовал запросы как с "Cache:result = mysql_query и cache_delete() после запроса", и так и "mysql_function_query" с передачей на другой коллбек". Юзал тот или иной способ по случаю, когда как удобно.
Можно ли так делать, или же нужно использовать только один способ mysql запросов?

Может ли это быть связано с тем, что сервер после старта работы держится час с лишним, а потом тупо "встает", т.е в браузере сампа сервер как бы работает (пинг есть, список игроков), но на самом деле все игроки вылетели, и никто не может зайти.

$continue$
12.11.2015, 23:53
cache:
Процедурное программирование (https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
mysql_function_query:
Асинхронное программирование. (http://habrahabr.ru/post/51762/)

Виснуть - может. Выбор за Вами. Суть асинхронного программирование, то что код не ждет пока завершиться выполнение каких либо функции. Он сразу выполняет код.
Процедурное программирование - все идет друг за другом, то есть если есть какая то функция: func_one и func_two, и из какого то участка кода вызвали func_one, а потом func_two, то func_two не начнет работать, пока не завершиться выполнение func_one.


SA-MP же однопоточен (процедурное программирование), стоит ли использовать cache?
Конечно, нет. Если есть такая возможность в SA-MP, использовать многопоточный плагин - то лучше использовать его.
Запросы будут выполнятся в отдельном потоке от функции Pawn

Glant
13.11.2015, 00:23
Замораживание сервера вполне может быть связано с использованием Cache?

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

Daniel_Cortez
13.11.2015, 06:00
Немного перефразирую предыдущий ответ. Запросы, совершаемые через mysql_query, являются блокирующими операциями, т.е. выполняются в главном потоке и сервер вынужден ждать, пока он выполнится, прежде чем сделать что-то ещё. Такие задержки иногда отражаются на геймплее, когда другие игроки не движутся плавно, а зависают на короткий момент, дёргаются, и т.д. и т.п.
Если же взять асинхронный запрос (mysql_function_query), то сервер не ждёт, пока такой запрос выполнится, и может заниматься другими делами. Как только запрос выполнится, вызовется нужный коллбэк и можно будет обрабатывать результаты запроса. Иными словами, асинхронные запросы не являются блокирующими.


Замораживание сервера вполне может быть связано с использованием Cache?
Могут быть тысячи причин, по которым сервер может зависнуть. Лучше всего, если онлайн на сервере небольшой, использовать плагин Profiler, я как раз выложу днём перевод статьи с sa-mp.com по этому плагину.



А как же тогда обходились сервера с MySQL до появления многопоточных возможностей плагина?
Просто я видел множество модов, где используется только Cache.
Очевидно, что так и делали моды с небольшими лагами при каждом запросе.