Посоветуйте логику работы с удаленной mysql в многопотоке

Поддержка
  • @Bigma said in Посоветуйте логику работы с удаленной mysql в многопотоке:

    И скорее всего будет аффективнее не удалять, а добавлять метку true/false в колонку использования.

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

    можно сразу после взятия строки изменять в базе на false, а не по окончании.

    @eloventure said in Посоветуйте логику работы с удаленной mysql в многопотоке:

    @tet-vivi said in Посоветуйте логику работы с удаленной mysql в многопотоке:

    @eloventure используй промежуточный сервер

    @tet-vivi не совсем понял идею, можете чуть подробнее, пожалуйста?

    можно на промежуточном сервере разместить логику работы с сервером БД

  • @Bigma said in Посоветуйте логику работы с удаленной mysql в многопотоке:

    Не совсем понятно что вы имеете ввиду. В каком цикле и зачем вы собрались использовать строки.

    То есть если вы более подробно опишите задачу, можно будет подумать над ее решением.

    есть БД со строками login:password
    есть, допустим, 5 серверов с запущеным БАС, которые берут строку login:password из удаленной БД
    строка может быть использована неограниченное кол-во раз
    нужно сделать так, чтобы одна строка не использовалась одновременно на двух серверах

    @tet-vivi said in Посоветуйте логику работы с удаленной mysql в многопотоке:

    можно сразу после взятия строки изменять в базе на false, а не по окончании.

    тогда будет непонятно, используется эта строка или нет для других серверов

    @tet-vivi said in Посоветуйте логику работы с удаленной mysql в многопотоке:

    можно на промежуточном сервере разместить логику работы с сервером БД

    вот это я как раз понял) имелось в виду, на чем обработчик - что-то вроде php скрипта, который принимает запросы с айдишником от каждого сервера, распределяет очередь, делает селект из базы, и шлет обратно БАСу. А логику неиспользования одной строчки одновременно два/три/десять раз как реализовать?

  • @eloventure если php, хранить идентификатор используемых в базе вроде мемкеша или redis.(хотя можно и просто в файлах)

    есть возможность блокировки в mysql, например транзакции.
    это сможет стать защитой от изменения поля true/false от других в этот момент запросов.(транзакции как раз для этого и нужны)
    я в это не сильно углублялся, и не могу точно и правильно рассказать.(и давно было)

  • Даже транзакции излишни, достаточно сделать поле LOCK и поле счетчик успешных использований. Поток берет любую не использованную и не блокированную запись и блокирует ее. После того как поток закончил работу с ней он разблокирует, если закончил спешно то увеличивает счетчик, а если с ошибкой не увеличивает, но тут смотря какая логика нужна.

  • @UserTrue собственно это то что я первое и предложил. Ты доходчиво описал :)

  • Там все намного проще, но на пути встретишь тонны багов и кучу допиливаний.

  • @FastSpace да, стандартными средствами BAS не получилось реализовать.
    решил простым разделением баз, некрасиво, децентрализовано, в общем беспорядок :)