Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для Роуди.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.07.2015
    Сообщений
    154
    Репутация:
    17 ±

    быстродействие, эффективность или одно и то же.

    Всех категорически приветствую Вас, дорогие форумчане pro-pawn.

    Сабж: как будет эффективней проверять число строк и столбцов с заданным значением?
    Возможно не так изложил свою мысль, но приведу пример.

     Пример

    > Регистрируется игрок
    > Диалог с вводом E-MAIL
    > Игрок вводит то "мыло", которое уже зарегистрировано
    > Выходит ошибка о том, что мыло уже зарегистрировано


    У меня есть два варианта:
    1. с использованием коллбэка.
    PHP код:
     CMD:check(playeridparams[])
    {
        if(
    sscanf(params"s[24]"params[0])) return SendClientMessage(playerid, -1"check nick");

        static const
             
    frm_string[] = "SELECT * FROM `users` WHERE `Name` = '%s'";
        new 
    query_string[sizeof(frm_string)-2+MAX_PLAYER_NAME];
        
        
    format(query_stringsizeof(query_string), frm_string,params[0]);
        
    mysql_function_query(mysql_connect_IDquery_stringtrue"FindPlayer""ds"playeridparams[0]);
        return 
    true;
    }

    forward FindPlayer(playerid);
    public 
    FindPlayer(playerid)
    {
        new 
    rowsfields;
        
    cache_get_data(rowsfields);
        
        if(
    rows)
        {
            
    SendClientMessage(playerid, -1"Аккаунт найден.");
        }
        else
        {
            
    SendClientMessage(playerid, -1"Аккаунт НЕ найден.");
        }
    }


    2. Без использования коллбэка.

    PHP код:
    CMD:check_two(playeridparams[])
    {
        if(
    sscanf(params"s[24]"params[0])) return SendClientMessage(playerid, -1"check nick");
        static const
            
    frm_string[] = "SELECT * FROM `users` WHERE `Name` = '%s'";
            
        new 
    query_string[sizeof(frm_string)-2+MAX_PLAYER_NAME];
        
        
    format(query_stringsizeof(query_string),frm_stringparams[0]);
        new 
    Cachecheck mysql_query(mysql_connect_IDquery_stringtrue);
        if(
    cache_num_rows()==0)
        {
            
    cache_delete(check);
            
    SendClientMessage(playerid, -1"Аккаунт найден.");
        }
        else
        {
            
    SendClientMessage(playerid, -1"Аккаунт НЕ найден.");
        }
        
        return 
    true;

    Второй вариант я нашел в модах примерно 13 года, там естественно была старая версия mysql.

    Жду Вашего мнения, что лучше(эффективней).
    Последний раз редактировалось Роуди.; 17.08.2015 в 23:19.

  2. #2
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    1 - по ИДЕИ должно работать быстрей, так как многопоточный плагин.
    Стас (Daniel_Cortez) - написал на днях урок как проверить скорость то или иной функции.
    Как Вам, кстати тема: SQL Injection?

  3. #3
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Роуди. Посмотреть сообщение
    быстродействие, эффективность или одно и тоже
    Под эффективностью можно понимать не только производительность кода, но и производительность труда программиста.
    Иными словами, эффективным может считаться ещё и вариант, более удобный для использования (и не факт, что код у такого варианта будет самым быстродейственным).
    Так что нет, "быстродействие" и "эффективность" - это отнюдь не одно и то же.

    По сабжу: а что по вашему лучше? Выполнять запрос в одном потоке (по сути блокирующая операция), заставляя сервер простаивать впустую, пока не выполнится запрос, или сделать запрос в отдельном потоке и ждать вызова коллбэка, позволив серверу тем временем делать другую работу (неблокирующая операция)?


    Цитата Сообщение от Роуди. Посмотреть сообщение
    Второй вариант я нашел в модах примерно 13 года, там естественно была старая версия mysql.
    Возьмите RLS в оригинале (2011?), там вообще всё на файлах.


    Думаете, кому-то интересно знать моё настоящее имя?
    И как вы представляете измерение производительности выполнения запросов к БД? В случае с коллбэком профайлер не будет ждать, пока запрос выполнится.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. 4 пользователя(ей) сказали cпасибо:
    $continue$ (18.08.2015) iWors (01.04.2016) Sp1ke (18.08.2015) Роуди. (18.08.2015)
  5. #4
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    1000 запросов в базу под циклом (с многопоточным и однопоточным)

  6. #5
    Аватар для Роуди.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.07.2015
    Сообщений
    154
    Репутация:
    17 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Под эффективностью можно понимать не только производительность кода, но и производительность труда программиста.
    Иными словами, эффективным может считаться ещё и вариант, более удобный для использования (и не факт, что код у такого варианта будет самым быстродейственным).
    Так что нет, "быстродействие" и "эффективность" - это отнюдь не одно и то же.

    По сабжу: а что по вашему лучше? Выполнять запрос в одном потоке (по сути блокирующая операция), заставляя сервер простаивать впустую, пока не выполнится запрос, или сделать запрос в отдельном потоке и ждать вызова коллбэка, позволив серверу тем временем делать другую работу (неблокирующая операция)?



    Возьмите RLS в оригинале (2011?), там вообще всё на файлах.



    Думаете, кому-то интересно знать моё настоящее имя?
    И как вы представляете измерение производительности выполнения запросов к БД? В случае с коллбэком профайлер не будет ждать, пока запрос выполнится.
    Спасибо, мой выбор пал выполнение кода в отдельном потоке. Кстати, насчет имени, ошибаетесь :) Мне интересно было узнать Ваше имя, как говорится Страна должна знать своих Героев.

    Тему можно закрывать, вопрос решен.

  7. #6
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    1000 запросов в базу под циклом (с многопоточным и однопоточным)
    В случае с отдельным потоком будет измерено только время, затраченное на посылку запросов, но не на их выполнение. Да и вообще для выбора лучшего варианта одной теории здесь более чем достаточно.

    Цитата Сообщение от Роуди. Посмотреть сообщение
    Тему можно закрывать, вопрос решен.
    Перемещаю в архив вопросов, закрыто.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  8. 2 пользователя(ей) сказали cпасибо:
    $continue$ (18.08.2015) Роуди. (18.08.2015)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •