0

Я понял, как оба эти средства контроля параллельности работают на простом английском языке. Однако меня больше интересовало, как пессимистический контроль должен выполняться в коде. Вот то, что я чувствую, давайте предположим, что два пользователя пытается обновить вики документаПессимистичная реализация оптимистического параллелизма

пессимистического контроль

Здесь, говорят нам использовать сделки.

BEGIN 
    SELECT DOC FROM WIKI WHERE DOC_ID = 1; 
    /* business logic */ 
    UPDATE WIKI SET DOC = INPUT WHERE DOC_ID = 1; 
END 

Однако это все еще подвержено перезаписыванию предыдущих обновлений. Я чувствую, что в транзакции должна быть вторая проверка, чтобы увидеть, произошли ли какие-либо записи после оператора select, если да откат или фиксация. Я прав?

+0

Если вы обеспокоены тем, что 'SELECT' и' UPDATE' будут работать с * различными * данными (поскольку другой пользователь сделал что-то между 'SELECT' и' UPDATE'), тогда ответ будет: нет, вы не должны волноваться * * ЕСЛИ ** вы находитесь в транзакции. Зачем? Поскольку транзакция изолирует среду, и вы работаете с данным * моментальным снимком *. Вам не нужно ничего блокировать, MySQL делает это для вас, если вы находитесь в транзакции. Вы можете проверить [доступные уровни изоляции для MySQL] (https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html) на странице руководства. –

ответ

1

у вас есть два выбора параллельности (пессимистический):

Table level Locking and Row Level Locking:

Но имейте в виду, что блокировка может привести к тупиковой ситуации, если у вас есть несколько пользователей. При использовании параллелизма вам нужно учитывать много вещей. Удачи!

UPDATE:

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

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