Что касается вашего вопроса о параллелизме, ваше приложение должно быть спроектировано так, чтобы соединения с базой данных были как можно более короткими. Каждое действие в базе данных должно включать: открывать соединение, действовать в базе данных, закрывать соединение, а не: открывать соединение, выполнять кучу работы, которая может или не может быть связана с получением / обновлением / вставкой данных, а затем в конце "закрыть соединение.
Теперь, что касается параллелизма приложений, у вас есть два сценария. В первом сценарии, который я назову «последняя запись выигрывает», любое соединение, которое записывает в данную строку последним, является версией сохраняемых данных. Если Алиса затем Боб пишет в столбец Имя в той же строке в то же время, версия Боба будет то, что сохраняется. Это, безусловно, самое простое, но если у вас может быть много людей, обновляющих одни и те же данные, это может быть проблематично.
Альтернативой является «первый выигрыш при записи», также называемый оптимистичным параллелизмом. В этом сценарии второй вызов проверяет, что данные не изменились с момента их последнего извлечения, и если это произойдет, то транзакция будет откатана. Что будет дальше, зависит от вашего приложения. Некоторые системы просто выдают ошибку и требуют, чтобы пользователь повторно ввел свою информацию (отбрасывая свое первоначальное изменение). Это очевидно легче осуществить. Некоторые приложения сообщают пользователю, что данные изменились, и предоставляют некоторую информацию о том, что отличается, и спрашивают, хотят ли они перезаписать это изменение. Это может быть сложнее в зависимости от архитектуры вашей системы.
Подробнее см. Оптимистичный параллелизм .