powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / DataExpress - конструктор баз данных.
25 сообщений из 277, страница 6 из 12
DataExpress - конструктор баз данных.
    #39845211
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoshVostt,

никакой :)

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


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

Ок. Один пользователь обновляет один набор полей, другой пользователь обновляет другой набор полей. В итоге в БД оказывается запись в несогласованном виде, так как ни один бизнес-сценарий валидации не в состоянии проконтролировать изменения, ведь с точки зрения пользователя и системы сохраняется ровно то, что находится на форме.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39845260
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt7bitПессимистическая. В отдельной табличке храню сведения о пользователе и id редактируемой записи.

Ок. Один пользователь обновляет один набор полей, другой пользователь обновляет другой набор полей. В итоге в БД оказывается запись в несогласованном виде, так как ни один бизнес-сценарий валидации не в состоянии проконтролировать изменения, ведь с точки зрения пользователя и системы сохраняется ровно то, что находится на форме.
У него в качестве БД выступает Firebird. Параметры транзакции: WRITE, READ COMMITTED, RECORD_VERSION, NO WAIT.
То есть при возникновении коллизии Firebird сразу выдаст одному из пользователей сообщение об ошибке и отменит его операцию.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39845282
7bit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий МухУ него в качестве БД выступает Firebird. Параметры транзакции: WRITE, READ COMMITTED, RECORD_VERSION, NO WAIT.
То есть при возникновении коллизии Firebird сразу выдаст одному из пользователей сообщение об ошибке и отменит его операцию.
Обычно коллизий быть не должно, т. к. одновременно только один пользователь может редактировать запись с определенным id.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39845291
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7bitДмитрий МухУ него в качестве БД выступает Firebird. Параметры транзакции: WRITE, READ COMMITTED, RECORD_VERSION, NO WAIT.
То есть при возникновении коллизии Firebird сразу выдаст одному из пользователей сообщение об ошибке и отменит его операцию.
Обычно коллизий быть не должно, т. к. одновременно только один пользователь может редактировать запись с определенным id.
Да я понял, что "В отдельной табличке храню сведения о пользователе и id редактируемой записи".
Ещё 20 лет назад так делали. С точки зрения разработки это не интересно.

Вот если бы вы совместное редактирование реализовали, то любопытно было бы посмотреть.
Но оно конечно не надо в вашем продукте.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39845615
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухУ него в качестве БД выступает Firebird. Параметры транзакции: WRITE, READ COMMITTED, RECORD_VERSION, NO WAIT.
То есть при возникновении коллизии Firebird сразу выдаст одному из пользователей сообщение об ошибке и отменит его операцию.

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

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

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

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


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

Т.е. запись блокируется на всё время редактирования? Редактирование это открытая форма, на которой пользователь может просидеть часок другой или сам процесс сохранения?
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39845662
7bit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Совместного редактирования нет.
hVosttТ.е. запись блокируется на всё время редактирования?Да.
hVosttНо тогда вопрос, как вычисляются "только изменённые поля" -- читаем, сравниваем, пишем? В рамках транзакции. Супер оптимизация
Я использую компоненты TSQLQuery (набор данных), где прописываются инструкции SQL INSERT, UPDATE, DELETE. В INSERT и UPDATE указываются все поля, имеющиеся в наборе данных. Инструкции прописываются один раз и в процессе работы не меняются. Теперь вместо прописывания UPDATE я переопределяю метод TIBConnection.ConstructUpdateSQL и формирую UPDATE динамически сравнивая поля набора данных: Value <> OldValue.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847008
Фотография vovka3003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухВот если бы вы совместное редактирование реализовали...А такое где-нибудь реализовано, просветите, если не сложно..? (Документы google не в счет)
И как это должно работать..? 2 пользователя одновременно открывают одну запись, один пишет в поле "кот", второй в этом же поле пишет "пёс". Оба тыкнули "Сохранить". У них должен выйти "КотоПёс"?
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847456
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vovka3003,

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

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

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

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

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

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

п.1. вообще прошлый век, мне кажется ещё лет 100 будут пилить студенческие поделки со своей эксклюзивной блокировкой, просто потому что тямы на большее не хватает. не со зла говорю, просто грустно.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847534
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847600
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
п.1. вообще прошлый век, мне кажется ещё лет 100 будут пилить студенческие поделки со своей эксклюзивной блокировкой, просто потому что тямы на большее не хватает. не со зла говорю, просто грустно. Ну дык предложи сирым и убогим, красивое решение. Где оно ?
О каком большем речь ? Раскрой тему.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847604
Фотография vovka3003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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С - там какая блокировка используется?
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847606
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vovka3003Вот к примеру - пресловутая 1С - там какая блокировка используется?Кто последний, тот и папа.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847609
Фотография vovka3003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttп.1. вообще прошлый век, мне кажется ещё лет 100 будут пилить студенческие поделки со своей эксклюзивной блокировкой, просто потому что тямы на большее не хватает. не со зла говорю, просто грустно.
Тут опять же - смотря с какой колокольни смотреть... Я долгое время щупал всякие аналогичные проги. В целом при комплексном анализе пока могу сделать вывод, что автору DX удалось сделать гораздо большее, чем во многих аналогичных конструкторах. Сложно сказать на какое г**но он должен изойтись чтобы реализовать "идеальное" во всех смыслах решение. Предлагать ему собрать мафию единомышленников "для ускорения" - смысла нет, ибо волк-одиночка.
Потому сам особо не сетую, ищем баги, льем хотелки, прога растет потихоньку...
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847612
Фотография vovka3003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argovovka3003Вот к примеру - пресловутая 1С - там какая блокировка используется?Кто последний, тот и папа.
О как... То есть можно в сетке просто параллельно с кем-то открыть док и сломать его? Это ж лажа какая-то...
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847617
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vovka3003О как... То есть можно в сетке просто параллельно с кем-то открыть док и сломать его? Это ж лажа какая-то...Можно наверно прикрутить кастомную проверку.
Типа зашел в карточку. Пока сижу в ней никто другой не сможет ее редактировать.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847678
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argovovka3003О как... То есть можно в сетке просто параллельно с кем-то открыть док и сломать его? Это ж лажа какая-то...Можно наверно прикрутить кастомную проверку.
Типа зашел в карточку. Пока сижу в ней никто другой не сможет ее редактировать.
Да просто предупреждение, типа Вася сейчас тоже смотрит эту карточку + "кто последний тот и папа" + подробный лог редактирования.
И не надо ничего изобретать.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847679
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviarL_argoпропущено...
Можно наверно прикрутить кастомную проверку.
Типа зашел в карточку. Пока сижу в ней никто другой не сможет ее редактировать.
Да просто предупреждение, типа Вася сейчас тоже смотрит эту карточку + "кто последний тот и папа" + подробный лог редактирования.
И не надо ничего изобретать.
Естественно на платформенном уровне.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847694
Фотография vovka3003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt3. оптимистичная блокировка -- ресурс не блокируется на время редактирование, много пользователей может осуществлять редактирование. однако нормально выполнить сохранение может только первый пользователь. пользователь, который пытается сохранить свои изменения поверх чужих изменений получает ошибку, и/или используются различные механизмы для устранения коллизий -- тут уже зависит от продукта и конкретных технических решений.
Все-таки не могу понять всей прелести такого "оптимизма": Редактировать могут все, ура! (оптимизм) , но сохранить запись в итоге может кто-то один [тут знак вопроса] - неважно, первый это папа или последний...
В чем же это "наиболее интересно для бизнеса"..? Можно привести реальный пример? .."на кошках": Берем кошку - ставим на землю, побежал - значит кот, побежала - значит кошка и т.п..
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847698
Фотография vovka3003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviar.. предупреждение, типа Вася сейчас тоже смотрит эту карточку + "кто последний тот и папа" + подробный лог редактирования...
Сейчас, если попытаться открыть занятую запись - DataExpress предупреждает: "Запись уже редактируется пользователем {user_name}" и открывает ее в режиме чтения. То есть - легким движением руки (несложным скриптом) можно перехватить этот момент и перевести запись в режим редактирования.

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

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

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

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

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

А это зачем..?
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847703
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>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.
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 
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847707
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vovka3003А это зачем..?
Шутите? Разве тот чел из стоматологического кабинета от вас этого не требовал?))
Ну хотя если там не большой объем данных, то можно и без лога.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847708
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев SET @ErrorVar=@@error;
IF (@ErrorVar <> 0) ROLLBACK ELSE COMMIT; --Отменить транзакцию, если есть ошибки

А это что за СУБД, MSSQL?
Так обычно не делают. Если au_Приложения_Upd будет вызываться не только из интерфейса, то напоретесь на несоответствие кол-ва открытых и закрытых транзакций.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847716
Фотография vovka3003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviarvovka3003А это зачем..?
Шутите? Разве тот чел из стоматологического кабинета от вас этого не требовал?))
Ну хотя если там не большой объем данных, то можно и без лога. Видимо из контекста недопонял. Изначально так прикинул, что имеется ввиду лог непосредственно в реальном времени, и думаю: "зачем он пользователю". А так вообще есть расширение такое. Правда с ним однажды смешной случай приключился - один из пользователей перед выкладкой на форум решил "обезличить" данные методом замены на "Рога и Копыта". Скинул, значит, а то что у него этот логер за ним приглядывал - об этом забыл. Сижу над этой базой и хохочу. В логе: [Старое значение], [Новое значение]. Автор расширяйки трохи перестарался и залупил целую "систему отката". А ТС, бедняга полночи сидел над ней и думал что очищает данные...
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847717
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vovka3003,

Ага, есть такой эффект.
...
Рейтинг: 0 / 0
DataExpress - конструктор баз данных.
    #39847718
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обезличивать надо нативно))
...
Рейтинг: 0 / 0
25 сообщений из 277, страница 6 из 12
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / DataExpress - конструктор баз данных.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]