Проблема одновременного доступа в базе данных MySQL - PullRequest
1 голос
/ 23 февраля 2010

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

Задачи вставляются в базу данных сайтом php, работающим на той же машине.

Какой хороший (нужно, чтобы это было быстро) способ выбирать и обновлять эти задачи как «в процессе», чтобы избежать многократного выбора скриптами python

edit: база данных mysql

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 24 февраля 2010

Чтобы ускорить процесс, поместите процесс в хранимую процедуру и верните выбранную строку из этой процедуры. Таким образом, только одна поездка на сервер базы данных.

1 голос
/ 24 февраля 2010

Используйте таблицу InnoDB Tasks, затем:

select TaskId, ... from Tasks where State="New" limit 1;
update Tasks set State="In Progress" where TaskId=<from above> and State="New";

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

Вам понадобится индекс для TaskId и State.

1 голос
/ 23 февраля 2010

Не зная больше о вашей архитектуре, я предлагаю следующий метод.

1) Lock Process table
2) Select ... from Process table where State="New"
3) processlist = [list of process id''s from step 2]
4) Update Process table set State="In progress" where ProcessId in [processlist]
5) Unlock Process table.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...