The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Обеспечить непротиворечивость одновременно редактируемых данных"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Базы данных, SQL)
Изначальное сообщение [ Отслеживать ]

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

Оглавление

Сообщения [Сортировка по времени | RSS]


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

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

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

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


Ответить | Правка | Наверх | Cообщить модератору

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

: )

Ответить | Правка | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

5. "Обеспечить непротиворечивость одновременно редактируемых данных"  +/
Сообщение от ACCA (ok), 01-Май-22, 06:45 
Техники очень простые.

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру