2011-07-28 3 views
1

У меня есть два процесса cron, работающих параллельно.mysql - Как зафиксировать после нескольких вставок

Процесс 1 вставляет и обрабатывает 2 считывает эти вставки.

Проблема, с которой я сталкиваюсь, - это процесс 1, необходимо вставить несколько строк, прежде чем процесс 2 сможет их прочитать.

Например, 1. Процесс 1 должен вставить 10 строк

  1. Процесс 1 вкладыши 3 строки

  2. Процесс 2 считывает эти 3 строки

  3. Процесс 1 вставляет строки 4 ..10

  4. Процесс 2 читает строки 4..10

Что нуждается

  1. Процесс 1 строка вставляет 1..10

  2. Процесс 2 считывает строки 1..10

А) Есть ли блокировка Я таблица для вставок в процессе 1?

B) Должен ли я начать транзакцию, делать вставки, а затем совершать?

Если таблица заблокирована будет другой сеанс, что для разблокировки или другие сеансы получат ошибку/предупреждение об блокировке?

ответ

3

Не блокируйте стол. Используйте транзакцию. Сделки являются атомными.

+0

Это правда, вы хотите использовать транзакции. Транзакции поддерживаются механизмом хранения InnoDB - они не поддерживаются MyISAM. – TehShrike

+0

@Ken Ваш вопрос - пример текстовой книги для использования транзакций. – Hyperboreus

+0

Я не согласен. Сделки здесь не решают проблему. Транзакции не блокируют другие транзакции. –

0

Если вам нужно заблокировать процесс 2 до завершения процесса 1, вы должны, как вы сказали, заблокировать соответствующие таблицы.

Если вы вставили все 10 строк в один запрос, вы можете положиться на блокировку таблицы MyISAM, однако, если вы вставляете отдельные запросы или используете InnoDB, вам необходимо явно заблокировать таблицы, используя [LOCK TABLES .. WRITE] (http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html) в процессе 1 и освободите блокировки, когда вы закончите.

Процесс 2 будет любезно ждать, когда блокировка записи будет освобождена перед чтением из таблицы.

Здесь очень важно убедиться, что сервер сначала получает запросы в процессе 1, поэтому вы можете использовать там какую-то магию.

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

Смежные вопросы