Допустим, у меня есть приложение SPA для управления данными пользователя (имя, возраст и т. Д.) Со следующей структурой:
SPA <-> my-api-servcie.com VIP <--> [my-api-server-1.com, my-api-server-2.com]
API построен с использованием SpringBoot, Java, Spring JDBC, oracle 12c
Iхотите, чтобы имя было уникальным.Однако у меня нет контроля над схемой БД, и я не могу добавить уникальное ограничение для столбца имени.В любом случае, я реализовал следующие превентивные меры:
- Уровень интерфейса
- проверка для предотвращения повторяющихся имен
- раскладка полноэкранного спиннера для предотвращения случайных нажатий
- Уровень API
- проверка для предотвращения дублирования имен
С учетом всего вышеперечисленного в одной добычепользователям удалось отправить 2 запроса POST, оба из которых прошли успешно, пройдя все вышеперечисленные проверки.
Вызовы выглядели примерно так: каждый запрос занимал пару миллисекунд:
POST my-api-server-1.com/user {name:"Sam"} at 15-JUN-18 02.11.20.000000000 PM
POST my-api-server-2.com/user {name:"Sam"} at 15-JUN-18 02.11.23.000000000 PM
Первый кажется странным, что оба запроса были успешными, хотяони были почти на 2 секунды друг от друга.Технически, второй вызов не должен был пройти проверку на уровне API.Что было бы причиной такого поведения?Есть ли какое-то краткосрочное обналичивание уровня JDBC или Oracle?
Второй , какие еще профилактические меры я мог бы сделать, кроме добавления ограничения БД?
Я мог бы использовать синхронизированный метод, но это вызвало бы некоторые последствия для производительности.