URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10417
[ Назад ]

Исходное сообщение
"Обеспечить непротиворечивость одновременно редактируемых данных"

Отправлено бочок , 24-Апр-22 01:37 
Привет.
Какие есть техники обеспечения непротиворечивости данных, которые могут редактировать одновременно много пользователей? В частности, интересуют подходы к обработке параллельного добавления противоречащих бизнес-логике данных. Например, пользователь не должен состоять во враждующих сообществах "линуксоиды" и "виндузятники" единовременно, но в других - без ограничений; как без полной блокировки таблицы обработать ситуацию, когда запросы, добавляющие пользователя в оба из них, приходят одновременно.

Содержание

Сообщения в этом обсуждении
"Обеспечить непротиворечивость одновременно редактируемых данных"
Отправлено ыы , 24-Апр-22 11:20 
> Привет.
> Какие есть техники обеспечения непротиворечивости данных, которые могут редактировать
> одновременно много пользователей? В частности, интересуют подходы к обработке параллельного

Через блокировку.

> добавления противоречащих бизнес-логике данных. Например, пользователь не должен состоять
> во враждующих сообществах "линуксоиды" и "виндузятники" единовременно, но в других -
> без ограничений; как без полной блокировки таблицы обработать ситуацию, когда запросы,
> добавляющие пользователя в оба из них, приходят одновременно.

Посмотрите как эта проблема решается в git.



"Обеспечить непротиворечивость одновременно редактируемых данных"
Отправлено бочок , 25-Апр-22 11:52 
> Через блокировку.

Блокировку чего именно? Если всей таблицы, то это как-то слишком грустно. Для ясности могу сказать, что юзаю MySQL/InnoDB.

> Посмотрите как эта проблема решается в git.

А где именно она встречается в гите? И как вообще называется эта проблема, а то я даже хз, какие формулировки гуглить..


"Обеспечить непротиворечивость одновременно редактируемых данных"
Отправлено Аноним , 26-Апр-22 17:42 
>> Через блокировку.
> Блокировку чего именно? Если всей таблицы, то это как-то слишком грустно. Для
> ясности могу сказать, что юзаю MySQL/InnoDB.
>> Посмотрите как эта проблема решается в git.
> А где именно она встречается в гите? И как вообще называется эта
> проблема, а то я даже хз, какие формулировки гуглить..

По идее, кооперативное редактирование или типа того.

Я бы на вашем месте сделал просто. При открытии для редактирования загружается время последнего изменения. При сохранении вы его шлете в форме. Если на сервере уже сохранена более новая версия, пользователю выдается ошибка. Пользователь как-нибудь разруливает и сохраняет новую версию.


"Обеспечить непротиворечивость одновременно редактируемых данных"
Отправлено ыы , 27-Апр-22 12:40 
>[оверквотинг удален]
>> Блокировку чего именно? Если всей таблицы, то это как-то слишком грустно. Для
>> ясности могу сказать, что юзаю MySQL/InnoDB.
>>> Посмотрите как эта проблема решается в git.
>> А где именно она встречается в гите? И как вообще называется эта
>> проблема, а то я даже хз, какие формулировки гуглить..
> По идее, кооперативное редактирование или типа того.
> Я бы на вашем месте сделал просто. При открытии для редактирования загружается
> время последнего изменения. При сохранении вы его шлете в форме. Если
> на сервере уже сохранена более новая версия, пользователю выдается ошибка. Пользователь
> как-нибудь разруливает и сохраняет новую версию.

1. имеем проблему.
2. "как-нибудь разруливает"
3. ПРОФИТ!!!

: )


"Обеспечить непротиворечивость одновременно редактируемых данных"
Отправлено бочок , 02-Май-22 03:00 
> Через блокировку.

В принципе, да, через блокировку такое разруливать можно, но это выглядит слабопереносимо между разными СУБД/движками и требует очень вдумчиво составлять схему и способы блокировок. Кроме того, JPA очень странно с этим работает, такое ощущение, что есть более лучший путь.

Феномен(тм), который я "изобрёл", давно известен под именем read skew/write skew. Читать полезно.


"Обеспечить непротиворечивость одновременно редактируемых данных"
Отправлено ACCA , 01-Май-22 06:45 
Техники очень простые.

1. MQ с запросамии на уровне приложения (7!)
2. Анализируешь на непротиворечивость всю очередь, прежде чем позволить параллельную обработку

Не тащи бардак в базу данных, там уже гарантированно не разберёшься.


"Обеспечить непротиворечивость одновременно редактируемых данных"
Отправлено бочок , 02-Май-22 02:54 
> 1. MQ с запросамии на уровне приложения (7!)
> 2. Анализируешь на непротиворечивость всю очередь, прежде чем позволить параллельную обработку

А можно пример использования?


"Обеспечить непротиворечивость одновременно редактируемых данных"
Отправлено qwerty , 05-Май-22 15:34 
CONSTRAINT constraint_name CHECK ( expression )