Несколько одновременных скриптов с бд

Тема в разделе "Как сделать...", создана пользователем LEXAlForpostl, 20 фев 2012.

  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    В Бд есть 100 000 записей.
    Порядка 100 скриптов одновременно с бд будут брать запись производить с ней изменения и потом апдейтить её в БД.
    Как сделать так, чтобы исключить возможность обработки записи более одного раза, т.е. чтобы 2+ скрипта не получили одну и ту же запись?
     
    Iwashka нравится это.
  2. cmd

    cmd Создатель

    Регистр.:
    24 авг 2011
    Сообщения:
    25
    Симпатии:
    2
    mysql? там одновременно INSERT и UPDATE осуществляет только один пользователь.

    Ещё есть разные способы расчета данных при записи типа
    Код:
    UPDATE tbl SET field = field + 1
    Вообще, Вам бы лучше в разделе "Базы данных" написать, я думаю...
     
    Iwashka нравится это.
  3. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Скрипты все идентичные. И юзер и пасс.
    Но сначала будет селект и только через секунду апдейт, за эту секунду, кто-то может сделать селект этой же записи.
     
    Iwashka нравится это.
  4. psn

    psn

    Регистр.:
    30 апр 2009
    Сообщения:
    227
    Симпатии:
    30
    использовать транзакции
     
    Iwashka нравится это.
  5. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Напишите, подробней, пожалуйста. Как они в РНР называются?
     
    Iwashka нравится это.
  6. psn

    psn

    Регистр.:
    30 апр 2009
    Сообщения:
    227
    Симпатии:
    30
    ну я в mysql их не использовал, не было необходимости, использовал в других субд, там все очень просто, в поиске по mysql есть описание:

    http://www.nestor.minsk.by/kg/2003/50/kg35010.html - теория
    http://program.rin.ru/cgi-bin/print.pl?id=573#1 - описание

    подробнее можно поискать в поисковиках, набрав "транзакции mysql"

    на пхп можно вынести в функции. как то так:

    function mysql_tranc_begin() {
    mysql_query("BEGIN");
    }

    function mysql_tranc_commit() {
    mysql_query("COMMIT");
    }

    function mysql_tranc_rollback() {
    mysql_query("ROLLBACK");
    }

    вот пример использования транзакций в пхп http://oooportal.ru/?cat=article&id=1365
     
    Iwashka нравится это.
  7. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    попробуйте использовать функцию мускула DO RELEASE_LOCK
    ну и тут почитайте
     
    Iwashka нравится это.
  8. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    634
    Симпатии:
    1.421
    Использовать тип таблиц InnoDB, вместо обычного MyISAM. Там блокировки идут на уровне строк, а не всей таблицы, что позволит снизить вероятность ожидания снятия блокировки другими скриптами.
    Если у вас возникла такая постановка задачи это говорит о не оптимальной структуре базы данных и вместо этих костылей лучше поработать над структурой, чтобы исключить вообще возможность обращения к одной записи нескольких скриптов.
     
    Iwashka и bork75 нравится это.
  9. diden05

    diden05 Создатель

    Регистр.:
    20 окт 2009
    Сообщения:
    13
    Симпатии:
    4
    Полностью согласен, но это не отменяет использования механизма транзакций и в данном случае.
     
    Iwashka нравится это.