|
|
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
ViPRoshVostt, никакой :) Скорее всего тип блокировки "как фишка ляжет". 7bitПессимистическая. В отдельной табличке храню сведения о пользователе и id редактируемой записи. Ок. Один пользователь обновляет один набор полей, другой пользователь обновляет другой набор полей. В итоге в БД оказывается запись в несогласованном виде, так как ни один бизнес-сценарий валидации не в состоянии проконтролировать изменения, ведь с точки зрения пользователя и системы сохраняется ровно то, что находится на форме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2019, 23:56 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
hVostt7bitПессимистическая. В отдельной табличке храню сведения о пользователе и id редактируемой записи. Ок. Один пользователь обновляет один набор полей, другой пользователь обновляет другой набор полей. В итоге в БД оказывается запись в несогласованном виде, так как ни один бизнес-сценарий валидации не в состоянии проконтролировать изменения, ведь с точки зрения пользователя и системы сохраняется ровно то, что находится на форме. У него в качестве БД выступает Firebird. Параметры транзакции: WRITE, READ COMMITTED, RECORD_VERSION, NO WAIT. То есть при возникновении коллизии Firebird сразу выдаст одному из пользователей сообщение об ошибке и отменит его операцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2019, 08:34 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
Дмитрий МухУ него в качестве БД выступает Firebird. Параметры транзакции: WRITE, READ COMMITTED, RECORD_VERSION, NO WAIT. То есть при возникновении коллизии Firebird сразу выдаст одному из пользователей сообщение об ошибке и отменит его операцию. Обычно коллизий быть не должно, т. к. одновременно только один пользователь может редактировать запись с определенным id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2019, 09:29 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
7bitДмитрий МухУ него в качестве БД выступает Firebird. Параметры транзакции: WRITE, READ COMMITTED, RECORD_VERSION, NO WAIT. То есть при возникновении коллизии Firebird сразу выдаст одному из пользователей сообщение об ошибке и отменит его операцию. Обычно коллизий быть не должно, т. к. одновременно только один пользователь может редактировать запись с определенным id. Да я понял, что "В отдельной табличке храню сведения о пользователе и id редактируемой записи". Ещё 20 лет назад так делали. С точки зрения разработки это не интересно. Вот если бы вы совместное редактирование реализовали, то любопытно было бы посмотреть. Но оно конечно не надо в вашем продукте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2019, 09:49 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
Дмитрий МухУ него в качестве БД выступает Firebird. Параметры транзакции: WRITE, READ COMMITTED, RECORD_VERSION, NO WAIT. То есть при возникновении коллизии Firebird сразу выдаст одному из пользователей сообщение об ошибке и отменит его операцию. В момент транзакции да. Но тогда вопрос, как вычисляются "только изменённые поля" -- читаем, сравниваем, пишем? В рамках транзакции. Супер оптимизация Речь была про вот это Дмитрий МухВот если бы вы совместное редактирование реализовали, то любопытно было бы посмотреть. Но оно конечно не надо в вашем продукте. Это и было интересно. 7bitОбычно коллизий быть не должно, т. к. одновременно только один пользователь может редактировать запись с определенным id. Т.е. запись блокируется на всё время редактирования? Редактирование это открытая форма, на которой пользователь может просидеть часок другой или сам процесс сохранения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2019, 22:37 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
Совместного редактирования нет. hVosttТ.е. запись блокируется на всё время редактирования?Да. hVosttНо тогда вопрос, как вычисляются "только изменённые поля" -- читаем, сравниваем, пишем? В рамках транзакции. Супер оптимизация Я использую компоненты TSQLQuery (набор данных), где прописываются инструкции SQL INSERT, UPDATE, DELETE. В INSERT и UPDATE указываются все поля, имеющиеся в наборе данных. Инструкции прописываются один раз и в процессе работы не меняются. Теперь вместо прописывания UPDATE я переопределяю метод TIBConnection.ConstructUpdateSQL и формирую UPDATE динамически сравнивая поля набора данных: Value <> OldValue. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2019, 08:54 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
Дмитрий МухВот если бы вы совместное редактирование реализовали...А такое где-нибудь реализовано, просветите, если не сложно..? (Документы google не в счет) И как это должно работать..? 2 пользователя одновременно открывают одну запись, один пишет в поле "кот", второй в этом же поле пишет "пёс". Оба тыкнули "Сохранить". У них должен выйти "КотоПёс"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2019, 14:14 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
vovka3003, Если кратко, существуют различные стратегии для многопользовательской работы с данными. 1. эксклюзивная блокировка ресурса -- только один пользователь в принципе может редактировать данные в один момент. реализация довольно простая для двух-звенки. но сложная для трёх-звенок, сильно усложнённая для распределённых систем и плохо реализуемая в принципе для веб/удалённых клиентов. и в целом, для бизнеса в большинстве случаев это крайне плохое и не эффективное решение. вот именно такое решение у вендора, разрабатывающего DataExpress. 2. пессимистичная блокировка -- ресурс не блокируется на время редактирование, много пользователей может осуществлять редактирование. ресурс блокируется во время сохранения, в результате все изменения перезаписываются. другими словами, кто последний тот и папа. 3. оптимистичная блокировка -- ресурс не блокируется на время редактирование, много пользователей может осуществлять редактирование. однако нормально выполнить сохранение может только первый пользователь. пользователь, который пытается сохранить свои изменения поверх чужих изменений получает ошибку, и/или используются различные механизмы для устранения коллизий -- тут уже зависит от продукта и конкретных технических решений. именно п.3 является интересным и для бизнеса и с точки зрения реализации. п.1. вообще прошлый век, мне кажется ещё лет 100 будут пилить студенческие поделки со своей эксклюзивной блокировкой, просто потому что тямы на большее не хватает. не со зла говорю, просто грустно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 13:27 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
vovka3003Дмитрий МухВот если бы вы совместное редактирование реализовали...А такое где-нибудь реализовано, просветите, если не сложно..? (Документы google не в счет) И как это должно работать..? 2 пользователя одновременно открывают одну запись, один пишет в поле "кот", второй в этом же поле пишет "пёс". Оба тыкнули "Сохранить". У них должен выйти "КотоПёс"? https://en.wikipedia.org/wiki/Operational_transformation https://hackernoon.com/operational-transformation-the-real-time-collaborative-editing-algorithm-bf8756683f66 ну и просто запрос по теме: https://www.google.com/search?q=collaboration editing algorithms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 15:20 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
п.1. вообще прошлый век, мне кажется ещё лет 100 будут пилить студенческие поделки со своей эксклюзивной блокировкой, просто потому что тямы на большее не хватает. не со зла говорю, просто грустно. Ну дык предложи сирым и убогим, красивое решение. Где оно ? О каком большем речь ? Раскрой тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 16:46 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
hVostt, за подробное разъяснение спасибо, примерно понял что к чему. Достаточно долго изучаю API DataExpress и думаю, что некоторое подобие п.2 и даже п.3 вполне возможно реализовать на уровне разработчика БД (насколько полноценно - сложно сказать) . Скриптам в программе даны повышенные привилегии в т.ч. и на обновление "внаглую" редактируемой кем-то сейчас записи... То есть - уложив определенную логику и sql-запросы в скрипт, заменив некоторые обработчики в интерфейсе теоретически можно такое сделать в подключаемом модуле расширений. Дмитрий Мух https://en.wikipedia.org/wiki/Operational_transformation https://hackernoon.com/operational-transformation-the-real-time-collaborative-editing-algorithm-bf8756683f66 ну и просто запрос по теме: https://www.google.com/search?q=collaboration editing algorithms Увидел в общем и целом описание алгоритмов, но не вникал особо, тяжко это для меня. Собственно хотелось, чтобы носом прямо ткнули: "Вот в этой [название] программе организована работа с использованием оптимистической блокировки..." (если таковые есть в природе) Вот к примеру - пресловутая 1С - там какая блокировка используется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 16:56 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
vovka3003Вот к примеру - пресловутая 1С - там какая блокировка используется?Кто последний, тот и папа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 16:59 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
hVosttп.1. вообще прошлый век, мне кажется ещё лет 100 будут пилить студенческие поделки со своей эксклюзивной блокировкой, просто потому что тямы на большее не хватает. не со зла говорю, просто грустно. Тут опять же - смотря с какой колокольни смотреть... Я долгое время щупал всякие аналогичные проги. В целом при комплексном анализе пока могу сделать вывод, что автору DX удалось сделать гораздо большее, чем во многих аналогичных конструкторах. Сложно сказать на какое г**но он должен изойтись чтобы реализовать "идеальное" во всех смыслах решение. Предлагать ему собрать мафию единомышленников "для ускорения" - смысла нет, ибо волк-одиночка. Потому сам особо не сетую, ищем баги, льем хотелки, прога растет потихоньку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 17:05 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
L_argovovka3003Вот к примеру - пресловутая 1С - там какая блокировка используется?Кто последний, тот и папа. О как... То есть можно в сетке просто параллельно с кем-то открыть док и сломать его? Это ж лажа какая-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 17:07 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
vovka3003О как... То есть можно в сетке просто параллельно с кем-то открыть док и сломать его? Это ж лажа какая-то...Можно наверно прикрутить кастомную проверку. Типа зашел в карточку. Пока сижу в ней никто другой не сможет ее редактировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 17:20 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
L_argovovka3003О как... То есть можно в сетке просто параллельно с кем-то открыть док и сломать его? Это ж лажа какая-то...Можно наверно прикрутить кастомную проверку. Типа зашел в карточку. Пока сижу в ней никто другой не сможет ее редактировать. Да просто предупреждение, типа Вася сейчас тоже смотрит эту карточку + "кто последний тот и папа" + подробный лог редактирования. И не надо ничего изобретать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 19:35 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
dma_caviarL_argoпропущено... Можно наверно прикрутить кастомную проверку. Типа зашел в карточку. Пока сижу в ней никто другой не сможет ее редактировать. Да просто предупреждение, типа Вася сейчас тоже смотрит эту карточку + "кто последний тот и папа" + подробный лог редактирования. И не надо ничего изобретать. Естественно на платформенном уровне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 19:36 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
hVostt3. оптимистичная блокировка -- ресурс не блокируется на время редактирование, много пользователей может осуществлять редактирование. однако нормально выполнить сохранение может только первый пользователь. пользователь, который пытается сохранить свои изменения поверх чужих изменений получает ошибку, и/или используются различные механизмы для устранения коллизий -- тут уже зависит от продукта и конкретных технических решений. Все-таки не могу понять всей прелести такого "оптимизма": Редактировать могут все, ура! (оптимизм) , но сохранить запись в итоге может кто-то один [тут знак вопроса] - неважно, первый это папа или последний... В чем же это "наиболее интересно для бизнеса"..? Можно привести реальный пример? .."на кошках": Берем кошку - ставим на землю, побежал - значит кот, побежала - значит кошка и т.п.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 20:29 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
dma_caviar.. предупреждение, типа Вася сейчас тоже смотрит эту карточку + "кто последний тот и папа" + подробный лог редактирования... Сейчас, если попытаться открыть занятую запись - DataExpress предупреждает: "Запись уже редактируется пользователем {user_name}" и открывает ее в режиме чтения. То есть - легким движением руки (несложным скриптом) можно перехватить этот момент и перевести запись в режим редактирования. Итак, имеем в "воздухе" 3 вида содержимого: 1. Старое, до открытия записи обоими юзерами. 2. Изменения внесенные юзером №1 (анализировать их врядли будем, ибо он намеренно превратил их в кашу, желая нас запутать). 3. Изменения внесенные более поздним юзером №2 (внесенные им изменения аналогичны изменениям юзера 1). - Оба нажали "отмена" и осталось содержимое № 1. все ОК. - "Отмену" нажал любой из юзеров, второй нажал "Сохранить". Соответственно "папой" стал №2 или №3. - все ОК. Что дальше..? Когда оба решили сохраниться? dma_caviarподробный лог редактирования. А это зачем..? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 20:45 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
>vovka3003, сегодня, 20:45 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1210740&msg=21945946][21945946] >...Что дальше..? Когда оба решили сохраниться? <Поступил согласно hVostt 3: 1. Сохраняется первый по времени 2. Второй получает отказ и выборку из полей текущего состояния редактируемого 3. Реализация Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 21:04 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
vovka3003А это зачем..? Шутите? Разве тот чел из стоматологического кабинета от вас этого не требовал?)) Ну хотя если там не большой объем данных, то можно и без лога. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 21:24 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
ВМоисеев SET @ErrorVar=@@error; IF (@ErrorVar <> 0) ROLLBACK ELSE COMMIT; --Отменить транзакцию, если есть ошибки А это что за СУБД, MSSQL? Так обычно не делают. Если au_Приложения_Upd будет вызываться не только из интерфейса, то напоретесь на несоответствие кол-ва открытых и закрытых транзакций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 21:27 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
dma_caviarvovka3003А это зачем..? Шутите? Разве тот чел из стоматологического кабинета от вас этого не требовал?)) Ну хотя если там не большой объем данных, то можно и без лога. Видимо из контекста недопонял. Изначально так прикинул, что имеется ввиду лог непосредственно в реальном времени, и думаю: "зачем он пользователю". А так вообще есть расширение такое. Правда с ним однажды смешной случай приключился - один из пользователей перед выкладкой на форум решил "обезличить" данные методом замены на "Рога и Копыта". Скинул, значит, а то что у него этот логер за ним приглядывал - об этом забыл. Сижу над этой базой и хохочу. В логе: [Старое значение], [Новое значение]. Автор расширяйки трохи перестарался и залупил целую "систему отката". А ТС, бедняга полночи сидел над ней и думал что очищает данные... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 22:55 |
|
||
|
DataExpress - конструктор баз данных.
|
|||
|---|---|---|---|
|
#18+
vovka3003, Ага, есть такой эффект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2019, 23:08 |
|
||
|
|

start [/forum/topic.php?fid=33&msg=39847718&tid=1547081]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 170ms |

| 0 / 0 |
