Как избежать дубля?
От: TailWind  
Дата: 06.06.22 19:51
Оценка:
Программа -> http -> php -> mysql insert -> mysql ответ -> *** php ответ -> *** http ответ -> программа

Если там, где *** произойдёт обрыв связи, то программа подумает, что запись не вставлена в бд и повторит добавление, что приведёт к появлению дубля в бд

Как это решается?
Re: Как избежать дубля?
От: Слава  
Дата: 06.06.22 20:05
Оценка:
Здравствуйте, TailWind, Вы писали:

TW>Программа -> http -> php -> mysql insert -> mysql ответ -> *** php ответ -> *** http ответ -> программа

TW>Если там, где *** произойдёт обрыв связи, то программа подумает, что запись не вставлена в бд и повторит добавление, что приведёт к появлению дубля в бд
TW>Как это решается?

Обычно это решается через REST. Где-то у Sinclair было подробное объяснение о REST, вроде вот этого Протокол HTTP, но другое. Поищите по его сообщениям.

Общая идея — клиент генерирует GUID и указывает его в запросе, все запросы исполняются с проверкой, что такого GUID в совершённых операциях ещё не было.

Это очень грубое и поверхностное объяснение.
Re: Как избежать дубля?
От: Qulac Россия  
Дата: 07.06.22 04:39
Оценка: +4
Здравствуйте, TailWind, Вы писали:

TW>Программа -> http -> php -> mysql insert -> mysql ответ -> *** php ответ -> *** http ответ -> программа


TW>Если там, где *** произойдёт обрыв связи, то программа подумает, что запись не вставлена в бд и повторит добавление, что приведёт к появлению дубля в бд


TW>Как это решается?


Общее решение методы api для таких случаев должны быть индепонентны.
Программа – это мысли спрессованные в код
Re: Как избежать дубля?
От: SkyDance Земля  
Дата: 07.06.22 04:50
Оценка:
TW>Как это решается?

Путем добавления уникального идентификатора (чтобы БД не создавала дубли уже созданного).
Как вариант, append-only решения.
Re[2]: Как избежать дубля?
От: TailWind  
Дата: 09.06.22 10:50
Оценка:
Q>Общее решение методы api для таких случаев должны быть индепонентны.

Поясните на пальцах, плиз

Добустим нужно добавить карточку нового заказа в базу
Разные юзеры могут делать это одновременно
Re[3]: Как избежать дубля?
От: watchmaker  
Дата: 09.06.22 11:15
Оценка: 6 (1) +2
Здравствуйте, TailWind, Вы писали:

Q>>Общее решение методы api для таких случаев должны быть индепонентны.


TW>Поясните на пальцах, плиз


https://habr.com/ru/company/yandex/blog/442762/
Re: Как избежать дубля?
От: Буравчик Россия  
Дата: 09.06.22 11:17
Оценка: 92 (3) +1
Здравствуйте, TailWind, Вы писали:

TW>Программа -> http -> php -> mysql insert -> mysql ответ -> *** php ответ -> *** http ответ -> программа

TW>Если там, где *** произойдёт обрыв связи, то программа подумает, что запись не вставлена в бд и повторит добавление, что приведёт к появлению дубля в бд
TW>Как это решается?

Решается с помощью idempotency-key (ключей идемпотентности).

Клиент генерирует ключ идемпотентности (например, UUID) и отправляет его вместе с запросом. Если произойдет обрыв связи, то клиент повторно отправляет запрос, но с тем же ключом идемпотентности. И так до тех пор, пока не получит успешный ответ.

Сервер обрабатывает запросы, и при этом сохраняет ключи идемпотентности обработанных запросов. Перед обработкой запрос сервер ищет ключ идемпотентности среди сохраненных, и может определить, является ли данный запрос первым (который нужно обработать) или повторным (нужно отбросить).

Научно-популярно описано здесь, например:
https://habr.com/ru/company/yandex/blog/442762/
Best regards, Буравчик
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.