Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Разработка информационных систем Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8 9 10   вперед  Ctrl      все
 Re: DataExpress - конструктор баз данных.  [new]
hVostt
Member

Откуда:
Сообщений: 15861
ViPRos
hVostt,

никакой :)


Скорее всего тип блокировки "как фишка ляжет".


7bit
Пессимистическая. В отдельной табличке храню сведения о пользователе и id редактируемой записи.


Ок. Один пользователь обновляет один набор полей, другой пользователь обновляет другой набор полей. В итоге в БД оказывается запись в несогласованном виде, так как ни один бизнес-сценарий валидации не в состоянии проконтролировать изменения, ведь с точки зрения пользователя и системы сохраняется ровно то, что находится на форме.
4 авг 19, 23:56    [21941759]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2109
hVostt
7bit
Пессимистическая. В отдельной табличке храню сведения о пользователе и id редактируемой записи.


Ок. Один пользователь обновляет один набор полей, другой пользователь обновляет другой набор полей. В итоге в БД оказывается запись в несогласованном виде, так как ни один бизнес-сценарий валидации не в состоянии проконтролировать изменения, ведь с точки зрения пользователя и системы сохраняется ровно то, что находится на форме.

У него в качестве БД выступает Firebird. Параметры транзакции: WRITE, READ COMMITTED, RECORD_VERSION, NO WAIT.
То есть при возникновении коллизии Firebird сразу выдаст одному из пользователей сообщение об ошибке и отменит его операцию.
5 авг 19, 08:34    [21941830]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
7bit
Member

Откуда:
Сообщений: 19
Дмитрий Мух
У него в качестве БД выступает Firebird. Параметры транзакции: WRITE, READ COMMITTED, RECORD_VERSION, NO WAIT.
То есть при возникновении коллизии Firebird сразу выдаст одному из пользователей сообщение об ошибке и отменит его операцию.

Обычно коллизий быть не должно, т. к. одновременно только один пользователь может редактировать запись с определенным id.
5 авг 19, 09:29    [21941868]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2109
7bit
Дмитрий Мух
У него в качестве БД выступает Firebird. Параметры транзакции: WRITE, READ COMMITTED, RECORD_VERSION, NO WAIT.
То есть при возникновении коллизии Firebird сразу выдаст одному из пользователей сообщение об ошибке и отменит его операцию.

Обычно коллизий быть не должно, т. к. одновременно только один пользователь может редактировать запись с определенным id.

Да я понял, что "В отдельной табличке храню сведения о пользователе и id редактируемой записи".
Ещё 20 лет назад так делали. С точки зрения разработки это не интересно.

Вот если бы вы совместное редактирование реализовали, то любопытно было бы посмотреть.
Но оно конечно не надо в вашем продукте.
5 авг 19, 09:49    [21941888]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
hVostt
Member

Откуда:
Сообщений: 15861
Дмитрий Мух
У него в качестве БД выступает Firebird. Параметры транзакции: WRITE, READ COMMITTED, RECORD_VERSION, NO WAIT.
То есть при возникновении коллизии Firebird сразу выдаст одному из пользователей сообщение об ошибке и отменит его операцию.


В момент транзакции да. Но тогда вопрос, как вычисляются "только изменённые поля" -- читаем, сравниваем, пишем? В рамках транзакции. Супер оптимизация

Речь была про вот это

Дмитрий Мух
Вот если бы вы совместное редактирование реализовали, то любопытно было бы посмотреть.
Но оно конечно не надо в вашем продукте.


Это и было интересно.


7bit
Обычно коллизий быть не должно, т. к. одновременно только один пользователь может редактировать запись с определенным id.


Т.е. запись блокируется на всё время редактирования? Редактирование это открытая форма, на которой пользователь может просидеть часок другой или сам процесс сохранения?
5 авг 19, 22:37    [21942514]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
7bit
Member

Откуда:
Сообщений: 19
Совместного редактирования нет.
hVostt
Т.е. запись блокируется на всё время редактирования?
Да.
hVostt
Но тогда вопрос, как вычисляются "только изменённые поля" -- читаем, сравниваем, пишем? В рамках транзакции. Супер оптимизация

Я использую компоненты TSQLQuery (набор данных), где прописываются инструкции SQL INSERT, UPDATE, DELETE. В INSERT и UPDATE указываются все поля, имеющиеся в наборе данных. Инструкции прописываются один раз и в процессе работы не меняются. Теперь вместо прописывания UPDATE я переопределяю метод TIBConnection.ConstructUpdateSQL и формирую UPDATE динамически сравнивая поля набора данных: Value <> OldValue.
6 авг 19, 08:54    [21942595]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
vovka3003
Member

Откуда: Белгород
Сообщений: 74
Дмитрий Мух
Вот если бы вы совместное редактирование реализовали...
А такое где-нибудь реализовано, просветите, если не сложно..? (Документы google не в счет)
И как это должно работать..? 2 пользователя одновременно открывают одну запись, один пишет в поле "кот", второй в этом же поле пишет "пёс". Оба тыкнули "Сохранить". У них должен выйти "КотоПёс"?
8 авг 19, 14:14    [21944720]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
hVostt
Member

Откуда:
Сообщений: 15861
vovka3003,

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

1. эксклюзивная блокировка ресурса -- только один пользователь в принципе может редактировать данные в один момент. реализация довольно простая для двух-звенки. но сложная для трёх-звенок, сильно усложнённая для распределённых систем и плохо реализуемая в принципе для веб/удалённых клиентов.

и в целом, для бизнеса в большинстве случаев это крайне плохое и не эффективное решение.
вот именно такое решение у вендора, разрабатывающего DataExpress.

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

3. оптимистичная блокировка -- ресурс не блокируется на время редактирование, много пользователей может осуществлять редактирование. однако нормально выполнить сохранение может только первый пользователь. пользователь, который пытается сохранить свои изменения поверх чужих изменений получает ошибку, и/или используются различные механизмы для устранения коллизий -- тут уже зависит от продукта и конкретных технических решений.

именно п.3 является интересным и для бизнеса и с точки зрения реализации.

п.1. вообще прошлый век, мне кажется ещё лет 100 будут пилить студенческие поделки со своей эксклюзивной блокировкой, просто потому что тямы на большее не хватает. не со зла говорю, просто грустно.
9 авг 19, 13:27    [21945576]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2109
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
9 авг 19, 15:20    [21945713]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
L_argo
Member

Откуда:
Сообщений: 895
п.1. вообще прошлый век, мне кажется ещё лет 100 будут пилить студенческие поделки со своей эксклюзивной блокировкой, просто потому что тямы на большее не хватает. не со зла говорю, просто грустно.
Ну дык предложи сирым и убогим, красивое решение. Где оно ?
О каком большем речь ? Раскрой тему.
9 авг 19, 16:46    [21945793]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
vovka3003
Member

Откуда: Белгород
Сообщений: 74
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С - там какая блокировка используется?
9 авг 19, 16:56    [21945802]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
L_argo
Member

Откуда:
Сообщений: 895
vovka3003
Вот к примеру - пресловутая 1С - там какая блокировка используется?
Кто последний, тот и папа.
9 авг 19, 16:59    [21945804]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
vovka3003
Member

Откуда: Белгород
Сообщений: 74
hVostt
п.1. вообще прошлый век, мне кажется ещё лет 100 будут пилить студенческие поделки со своей эксклюзивной блокировкой, просто потому что тямы на большее не хватает. не со зла говорю, просто грустно.

Тут опять же - смотря с какой колокольни смотреть... Я долгое время щупал всякие аналогичные проги. В целом при комплексном анализе пока могу сделать вывод, что автору DX удалось сделать гораздо большее, чем во многих аналогичных конструкторах. Сложно сказать на какое г**но он должен изойтись чтобы реализовать "идеальное" во всех смыслах решение. Предлагать ему собрать мафию единомышленников "для ускорения" - смысла нет, ибо волк-одиночка.
Потому сам особо не сетую, ищем баги, льем хотелки, прога растет потихоньку...
9 авг 19, 17:05    [21945808]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
vovka3003
Member

Откуда: Белгород
Сообщений: 74
L_argo
vovka3003
Вот к примеру - пресловутая 1С - там какая блокировка используется?
Кто последний, тот и папа.

О как... То есть можно в сетке просто параллельно с кем-то открыть док и сломать его? Это ж лажа какая-то...
9 авг 19, 17:07    [21945811]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
L_argo
Member

Откуда:
Сообщений: 895
vovka3003
О как... То есть можно в сетке просто параллельно с кем-то открыть док и сломать его? Это ж лажа какая-то...
Можно наверно прикрутить кастомную проверку.
Типа зашел в карточку. Пока сижу в ней никто другой не сможет ее редактировать.
9 авг 19, 17:20    [21945820]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2018
L_argo
vovka3003
О как... То есть можно в сетке просто параллельно с кем-то открыть док и сломать его? Это ж лажа какая-то...
Можно наверно прикрутить кастомную проверку.
Типа зашел в карточку. Пока сижу в ней никто другой не сможет ее редактировать.

Да просто предупреждение, типа Вася сейчас тоже смотрит эту карточку + "кто последний тот и папа" + подробный лог редактирования.
И не надо ничего изобретать.
9 авг 19, 19:35    [21945906]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2018
dma_caviar
L_argo
пропущено...
Можно наверно прикрутить кастомную проверку.
Типа зашел в карточку. Пока сижу в ней никто другой не сможет ее редактировать.

Да просто предупреждение, типа Вася сейчас тоже смотрит эту карточку + "кто последний тот и папа" + подробный лог редактирования.
И не надо ничего изобретать.

Естественно на платформенном уровне.
9 авг 19, 19:36    [21945907]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
vovka3003
Member

Откуда: Белгород
Сообщений: 74
hVostt
3. оптимистичная блокировка -- ресурс не блокируется на время редактирование, много пользователей может осуществлять редактирование. однако нормально выполнить сохранение может только первый пользователь. пользователь, который пытается сохранить свои изменения поверх чужих изменений получает ошибку, и/или используются различные механизмы для устранения коллизий -- тут уже зависит от продукта и конкретных технических решений.

Все-таки не могу понять всей прелести такого "оптимизма": Редактировать могут все, ура! (оптимизм), но сохранить запись в итоге может кто-то один [тут знак вопроса] - неважно, первый это папа или последний...
В чем же это "наиболее интересно для бизнеса"..? Можно привести реальный пример? .."на кошках": Берем кошку - ставим на землю, побежал - значит кот, побежала - значит кошка и т.п..
9 авг 19, 20:29    [21945939]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
vovka3003
Member

Откуда: Белгород
Сообщений: 74
dma_caviar
.. предупреждение, типа Вася сейчас тоже смотрит эту карточку + "кто последний тот и папа" + подробный лог редактирования...

Сейчас, если попытаться открыть занятую запись - DataExpress предупреждает: "Запись уже редактируется пользователем {user_name}" и открывает ее в режиме чтения. То есть - легким движением руки (несложным скриптом) можно перехватить этот момент и перевести запись в режим редактирования.

Итак, имеем в "воздухе" 3 вида содержимого:

1. Старое, до открытия записи обоими юзерами.
2. Изменения внесенные юзером №1 (анализировать их врядли будем, ибо он намеренно превратил их в кашу, желая нас запутать).
3. Изменения внесенные более поздним юзером №2 (внесенные им изменения аналогичны изменениям юзера 1).

- Оба нажали "отмена" и осталось содержимое № 1. все ОК.
- "Отмену" нажал любой из юзеров, второй нажал "Сохранить". Соответственно "папой" стал №2 или №3. - все ОК.

Что дальше..? Когда оба решили сохраниться?

dma_caviar
подробный лог редактирования.

А это зачем..?
9 авг 19, 20:45    [21945946]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 2001
>vovka3003, сегодня, 20:45 [21945946]
>...Что дальше..? Когда оба решили сохраниться?

<Поступил согласно hVostt 3:
1. Сохраняется первый по времени
2. Второй получает отказ и выборку из полей текущего состояния редактируемого
3. Реализация
ALTER PROCEDURE [dbo].[au_Приложения_Upd] 
  @pk_Entity uniqueidentifier,
  @fk_Группа uniqueidentifier,
  @str_дНазвание nvarchar(50),
  @str_кНазвание nvarchar(30),
  @int_Версия int,
  @str_Ключ nvarchar(20),
  @fk_СерверДанных uniqueidentifier,
  @fk_ФайлСервер uniqueidentifier,
  @ts_Entity timestamp  
AS
BEGIN
  DECLARE @ErrorVar INT 
  SET NOCOUNT OFF
  BEGIN TRANSACTION
    UPDATE tbl_Приложения SET 
      fk_Группа       = @fk_Группа,
      str_кНазвание   = @str_кНазвание,
      str_дНазвание   = @str_дНазвание,
      int_Версия      = @int_Версия,
      str_Ключ        = @str_Ключ,
      fk_СерверДанных = @fk_СерверДанных,
      fk_ФайлСервер   = @fk_ФайлСервер
    WHERE ((pk_Entity=@pk_Entity) and (ts_Entity=@ts_Entity));
    
    SET @ErrorVar=@@error;
    IF (@ErrorVar <> 0) ROLLBACK ELSE COMMIT;    --Отменить транзакцию, если есть ошибки

    SELECT TOP(1)
      pr.pk_Entity,pr.fk_Группа,pr.str_кНазвание,pr.str_дНазвание,
      pr.int_Версия,pr.str_Ключ,pr.fk_СерверДанных,pr.fk_ФайлСервер,
      pr.ts_Entity,
      gr.str_Группа,sd.str_СерверДанных,fs.str_ФайлСервер,@ErrorVar as rc
    FROM tbl_Приложения pr, tbl_Группы gr, tbl_СерверыДанных sd, tbl_ФайлСерверы fs
    WHERE ((pr.pk_Entity=@pk_Entity) and (pr.fk_Группа=gr.pk_Entity) and (pr.fk_СерверДанных=sd.pk_Entity) and (pr.fk_ФайлСервер=fs.pk_Entity));
END 
9 авг 19, 21:04    [21945956]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2018
vovka3003
А это зачем..?

Шутите? Разве тот чел из стоматологического кабинета от вас этого не требовал?))
Ну хотя если там не большой объем данных, то можно и без лога.
9 авг 19, 21:24    [21945961]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2018
ВМоисеев
SET @ErrorVar=@@error;
IF (@ErrorVar <> 0) ROLLBACK ELSE COMMIT; --Отменить транзакцию, если есть ошибки

А это что за СУБД, MSSQL?
Так обычно не делают. Если au_Приложения_Upd будет вызываться не только из интерфейса, то напоретесь на несоответствие кол-ва открытых и закрытых транзакций.
9 авг 19, 21:27    [21945962]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
vovka3003
Member

Откуда: Белгород
Сообщений: 74
dma_caviar
vovka3003
А это зачем..?

Шутите? Разве тот чел из стоматологического кабинета от вас этого не требовал?))
Ну хотя если там не большой объем данных, то можно и без лога.
Видимо из контекста недопонял. Изначально так прикинул, что имеется ввиду лог непосредственно в реальном времени, и думаю: "зачем он пользователю". А так вообще есть расширение такое. Правда с ним однажды смешной случай приключился - один из пользователей перед выкладкой на форум решил "обезличить" данные методом замены на "Рога и Копыта". Скинул, значит, а то что у него этот логер за ним приглядывал - об этом забыл. Сижу над этой базой и хохочу. В логе: [Старое значение], [Новое значение]. Автор расширяйки трохи перестарался и залупил целую "систему отката". А ТС, бедняга полночи сидел над ней и думал что очищает данные...
9 авг 19, 22:55    [21945981]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2018
vovka3003,

Ага, есть такой эффект.
9 авг 19, 23:08    [21945983]     Ответить | Цитировать Сообщить модератору
 Re: DataExpress - конструктор баз данных.  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2018
Обезличивать надо нативно))
9 авг 19, 23:09    [21945984]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8 9 10   вперед  Ctrl      все
Все форумы / Разработка информационных систем Ответить