Я потратил утро на то, чтобы прочитать все главные статьи, которые Google взбалтывает оптимистичную блокировку, и для моей жизни я все равно не понимаю.
Я понимаю, что оптимистическая блокировка включает в себя добавление столбца для отслеживания "версии" записи и что этот столбец может быть меткой времени, счетчиком или любой другой конструкцией отслеживания версий. Но я до сих пор не понимаю, как это гарантирует целостность WRITE (это означает, что если несколько процессов одновременно обновляют один и тот же объект, то впоследствии объект правильно отражает истинное состояние, в котором он должен быть).
Может ли кто-нибудь предоставить пример конкретного, простого для понимания того, как оптимистическая блокировка может использоваться в Java (против, возможно, базы данных MySQL). Скажем, у нас есть объект Person
:
public class Person {
private String firstName;
private String lastName;
private int age;
private Color favoriteColor;
}
И что экземпляры Person
сохраняются в таблице people
MySQL:
CREATE TABLE people (
person_id PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL, # } I realize these column defs are not valid but this is just pseudo-code
age INT NOT NULL,
color_id FOREIGN KEY (colors) NOT NULL # Say we also have a colors table and people has a 1:1 relationship with it
);
Теперь скажем, что есть 2 программные системы или 1 система с двумя потоками, которые пытаются одновременно обновить один и тот же объект Person
:
- Программное обеспечение /Thread # 1 пытается сохранить изменение фамилии (от "John Smith" до "John Doe" ).
- Программное обеспечение /Thread # 2 пытается сохранить изменение в любимом цвете (от RED до GREEN)
Мои вопросы:
- Как оптимизировать блокировку в таблицах
people
и/илиcolors
? (Ищете конкретный пример DDL) - Как вы могли бы использовать эту оптимистичную блокировку на уровне приложения /Java? (Поиск конкретного примера кода)
- Может ли кто-нибудь запустить меня через сценарий, в котором изменяется DDL/код (от # 1 и # 2 выше), в моем сценарии (или любом другом сценарии) и будет "оптимистично блокировать"
people
/colors
таблицы правильно? В принципе, я ищу оптимистичную блокировку в действии, с легким для понимания объяснением того, почему она работает.