Добрый день дорогие друзья пришло время поговорить о базе данных.
Это чуть ли не основной вопрос при создании игрового мода или же доработке старого, но проверенного. Здесь мы поговорим о таких вещах как скорость работы, удобстве работы и стабильности.
Начнем с вечного вопроса что же все-таки быстрее файлы или MySQL. Для того чтоб понять насколько быстрее то или иное действие то вам необходимо знать или хотя бы догадываться о том, как оно работает.
Начнем с простого, то есть с файлов. Тут все проще чем кажется. Вы самостоятельно разрабатываете архитектуру файлов, в которых будете хранить необходимую информацию в тот момент, когда сервер выключен, или пользователь офлайн. Для этого необходимо подать запрос в систему об открытии файла и добавить или прочитать оттуда все содержимое построчно. Для этого потребуется минимум времени так как вы общаетесь на прямую к ОС без различных посредников. Когда в sa-mp только добавили вызываемый паблик OnPlayerUpdate, у большинства скриптов под этим называние было обновление пользовательских данный в файл. Как вы думаете были ли глюки или тормоза? Не было, и даже при 150 онлайн было вполне комфортно играть. Вот вам ясный пример скорости работы на файлах.
Давайте рассмотрим всеми так полюбившийся mysql. Многие утверждают, что mysql работает куда быстрее чем система на файлах. Давайте по аналогии с системой файлов рассмотрим принцип работы mysql. При Загрузке мода вы выполняете подключение в серверу mysql, на это уходит время не так много и будете делать вы это не так часто, поэтому этот параметр рассматривать мы не будем. Что же происходит, когда нам необходимо что-то прочитать, мы формируем sql-запрос, направляем его в плагин, который уже под созданным коннектом направляет его не сервер mysql. Дальше сервер в зависимости от используемого движка ищет необходимую информацию и возвращает ответ который ввиду кэша загружается в память плагина mysql и только после этого вы сможете получить доступ к той или иной информации.
Ответ на вопрос «что быстрее работает?» вполне очевиден. Но нам не всегда интересна скорость работы, так как за частую данные необходимо обработать. Для массовой обработки нам придётся довольно серьезно заморачиваться с файлами и писать довольно непростую систему в которой придётся проводить определённые обряды над каждым файлом что естественно будет занимать место в коде и удобством это пахнуть не будет. Так же если нам потребуется создание веб доступа к подобной базе данных, то это создаст дополнительных напряг в написании кода. Что касается mysql которая изначально создавалась для сайтов то тут не будет не каких проблем.
И так, написание систем и простота их использовании значительно проще выполнить с использованием mysql нежели использовать файловую систему где придется многое выполнять в ручную в отличии от уже имеющейся автоматики в mysql.
Теперь определившись с выбором бд где без сомнения станет mysql вы столкнётесь с проблемами которые не удастся решить покупкой более мощного железа. Это кратко временные задержки во время игры на сервере. В большинстве случаев после отправки запросов сервер останавливается для того чтоб подождать ответа от mysql (что в случае с использованием файлов просто исключено). Это не заметно на серверах с хорошей производительностью примерно до 300-500 игроков, в зависимости от того как часто вы обновляете данные. Решение не заставит себя долго ждать, зачем нам ждать ответа от сервера если мы можем после прихода данных от mysql вызывать функцию в которой и будем обрабатывать данные. Это отличное решение, но далеко не самое производительное. А что если возникает очередь с отправкой запросов к mysql. Да случается и такое, на этот счет существует много поточность, в результате которой мы может одновременно послать множество запросов, и они будут выполняться не зависимо друг от друга. Таким образом происходит распределение труда между процессами mysql и это позволяет не просто ускорить работу samp-сервера, но и обработку данных самим mysql.
Так же хочу вас предостеречь от лишних действий и кучи убитого времени на поиск неисправностей. Не стоит использовать обработку данных в отдельной функции во все места. Например, при загрузки игрового мода в результате чего сама загрузка данных в переменных вероятнее всего выйдет за приделы OnGameModeInit, так же стоит задуматься о том, что далеко не вся масса запросов при завершении работы сервера будет обработана и отправлена плагином. Так что сохранять в момент завершения работы мода рекомендую в обычном режиме дабы не потерять часть данных.
Из личного опыта могу сказать, что далеко не все плагины стабильно поддерживают работу по вызову функций. Не удачный опыт получился у меня с strickenkid mysql версии 2.1.1, при попытке перевести систему в вызов функции по выполнении запроса. Все работает хорошо до тех пор, пока не возникает проблема с подключением при попытке отправить новый запрос в момент вызова функций «ответок» после выполнения запроса. Как-то сложно загнул ну да ладно, главное то что использовать этот плагин не рекомендую особенно учитывая то что разработка давно не ведется.
Что касается [REL] MySQL Plugin то он обсуждается по сей день, и нареканий на работу не имеет и на данный момент единственный имеет мульти-поточность если конечно будете использовать версию >R7.
На этом все, не забывайте очищать кэш.
Комментариев нет:
Отправить комментарий