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

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
В Бд есть 100 000 записей.
Порядка 100 скриптов одновременно с бд будут брать запись производить с ней изменения и потом апдейтить её в БД.
Как сделать так, чтобы исключить возможность обработки записи более одного раза, т.е. чтобы 2+ скрипта не получили одну и ту же запись?
 
mysql? там одновременно INSERT и UPDATE осуществляет только один пользователь.

Ещё есть разные способы расчета данных при записи типа
Код:
UPDATE tbl SET field = field + 1

Вообще, Вам бы лучше Для просмотра ссылки Войди или Зарегистрируйся написать, я думаю...
 
Скрипты все идентичные. И юзер и пасс.
Но сначала будет селект и только через секунду апдейт, за эту секунду, кто-то может сделать селект этой же записи.
 
В Бд есть 100 000 записей.
Порядка 100 скриптов одновременно с бд будут брать запись производить с ней изменения и потом апдейтить её в БД.
Как сделать так, чтобы исключить возможность обработки записи более одного раза, т.е. чтобы 2+ скрипта не получили одну и ту же запись?

использовать транзакции
 
Напишите, подробней, пожалуйста. Как они в РНР называются?
 
ну я в mysql их не использовал, не было необходимости, использовал в других субд, там все очень просто, в поиске по mysql есть описание:

Для просмотра ссылки Войди или Зарегистрируйся - теория
Для просмотра ссылки Войди или Зарегистрируйся - описание

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

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

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

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

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

вот пример использования транзакций в пхп Для просмотра ссылки Войди или Зарегистрируйся
 
Использовать тип таблиц InnoDB, вместо обычного MyISAM. Там блокировки идут на уровне строк, а не всей таблицы, что позволит снизить вероятность ожидания снятия блокировки другими скриптами.
Если у вас возникла такая постановка задачи это говорит о не оптимальной структуре базы данных и вместо этих костылей лучше поработать над структурой, чтобы исключить вообще возможность обращения к одной записи нескольких скриптов.
 
Использовать тип таблиц InnoDB, вместо обычного MyISAM. Там блокировки идут на уровне строк, а не всей таблицы, что позволит снизить вероятность ожидания снятия блокировки другими скриптами. Если у вас возникла такая постановка задачи это говорит о не оптимальной структуре базы данных и вместо этих костылей лучше поработать над структурой, чтобы исключить вообще возможность обращения к одной записи нескольких скриптов.
Полностью согласен, но это не отменяет использования механизма транзакций и в данном случае.
 
Назад
Сверху