|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Есть БД, и 5-10 клиентов к нему подключенных. Как лучше сделать синхронизацию изменений одного и того же документа, если он редактируеться с двух разных клиентов в одно и то же время? Редактирование пакетное - при открытии запрашиваеться вся инфа по доку, закидываеться в контролы/кэшируеться. При нажатии на "сохранить" пишет в базу. Я вижу три пути: 1. Если кем то документ открыт на редактирование, другие могут открыть лишь на просмотр. То бишь при открытии проверять, открыт ли кем то еще, и если так, то дизаблить контролы. 2. При сохранении менять лишь то, что было изменено. Но тут надо будет проверять, что же изменилось. Данных много. Придеться проходить проходить по всем данным и сверять, что тоже не очень нравиться. Либо сделать систему, которая регистрирует изменения. Но насмотревшись на это всяких вордах(где внес изменение, потом исправил обратно, а при закрытии он все равно считает что ты что-то изменил) тоже не в восторге. 3. Если какой то параметр был изменен, обновлять его на других клиентах прямо в открытой форме. Тоже не очень нравиться решение(много сложностей с узнавание что что-то изменилось и обновлением этого). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2007, 19:15 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Собственно хочеться услышать ваши мнения, и как это сделано на других системах ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2007, 19:17 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
http://shara.by/download/~file=421c6b9bca81d3e7d7ce845f23381c05244799b7 или http://www.mirknig.com/2006/09/27/martin_fauler_arkhitektura_korporativnykh_programmnykh_prilozhenijj_ispravlennoe_izdanie.html ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2007, 20:11 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Eugene7 Я вижу три пути: 1. Если кем то документ открыт на редактирование, другие могут открыть лишь на просмотр. То бишь при открытии проверять, открыт ли кем то еще, и если так, то дизаблить контролы. 2. При сохранении менять лишь то, что было изменено. Но тут надо будет проверять, что же изменилось. Данных много. Придеться проходить проходить по всем данным и сверять, что тоже не очень нравиться. Либо сделать систему, которая регистрирует изменения. Но насмотревшись на это всяких вордах(где внес изменение, потом исправил обратно, а при закрытии он все равно считает что ты что-то изменил) тоже не в восторге. 3. Если какой то параметр был изменен, обновлять его на других клиентах прямо в открытой форме. Тоже не очень нравиться решение(много сложностей с узнавание что что-то изменилось и обновлением этого). Пункт 2 желателен, и он никак не противоречит первому. Однозначно при открытии одним на редактирование другим давать только просмотр. Блокировка прикладного уровня реализуется элементарнейше независимо от типа сервера БД: одна таблица блокировок и две процедуры: заблокировать объект и снять блокировку. Пункт 3 в общем случае может оказаться неприемлемым бредом: принципиальных технических проблем в реализации подобного нет, но логических казусов может быть немеряно. Например один правит валюту документа, другой цену, один правит кол-во, другой ассотимент и т.д. Просмотр документа должен быть статическим. А то открыл документ, отвернулся - а за этот миг там поменялись отображаемые данные. Разумеется, если пока я смотрел документ, а другой в это время внес в него изменения и сохранил их, то если я захочу начать редактировать открытый на просмотр документ, система должна отследить, что были изменения, из-за которых отображенное у меня в форме уже неактуально и как-то отреагировать на это. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 00:04 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
посмотрите как сделано в гугл догз. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 09:28 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Eugene7 пишет: > Есть БД, и 5-10 клиентов к нему подключенных. > Как лучше сделать синхронизацию изменений одного и того же документа, > если он редактируеться с двух разных клиентов в одно и то же время? Лучшая синхронизация - это ее отсутсвие. И не подумайте, что это шутка. На самом деле конфликты бывают редко, очень редко, и в основном люди просто договариваются друг с другом. > Редактирование пакетное - при открытии запрашиваеться вся инфа по доку, > закидываеться в контролы/кэшируеться. При нажатии на "сохранить" пишет в > базу. А вот это плохо. Если бы было непакетное, можно было бы просто оставить все на мелких атомарных консистентных транзакциях. Первое решение самое мудрое. и по-моему правильное. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 10:19 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
MasterZiv Eugene7 пишет: > Есть БД, и 5-10 клиентов к нему подключенных. > Как лучше сделать синхронизацию изменений одного и того же документа, > если он редактируеться с двух разных клиентов в одно и то же время? Лучшая синхронизация - это ее отсутсвие. И не подумайте, что это шутка. На самом деле конфликты бывают редко, очень редко, и в основном люди просто договариваются друг с другом. Только если они расположены в одном кабинете. В других же случаях, как показывает практика, конфликты могут происходить весьма часто. MasterZiv > Редактирование пакетное - при открытии запрашиваеться вся инфа по доку, > закидываеться в контролы/кэшируеться. При нажатии на "сохранить" пишет в > базу. А вот это плохо. Если бы было непакетное, можно было бы просто оставить все на мелких атомарных консистентных транзакциях. Почему плохо? Я бы сказал наоборот: это единственный правильный вариант. Или по крайней мере один из лучших. Пример сценария: открываю документ на редактирования, вношу разные изменения в разные его части. А потом по каким-либо причинам передумываю. В варианте пакетного изменения документа достаточно нажать кнопку "Отменить" или что-то типа того документ останется в исходном виде, как до начала редактирования. Как это сделать без пакетного изменения документа? Делать все в долгоиграющей транзакции? Ну-ну И потом, атомарные консистентные транзакции по изменению каждого атрибута могут привести к неконсистентности документа в целом на прикладном уровне ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 11:38 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Один документ состоит из нескольких строк с нескольких таблицах. Обычно поступают просто (на блокировочниках естесс-но). Перед тем как сохранять документ обновляют (или пытаются обновить) время модификации документа. Вариантов несколько - либо документ кем-то заблокирован, либо его кто-то уже изменил. Ну а дальше - уже и так понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 13:06 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
gardenmanОдин документ состоит из нескольких строк с нескольких таблицах. Обычно поступают просто (на блокировочниках естесс-но). Перед тем как сохранять документ обновляют (или пытаются обновить) время модификации документа. Вариантов несколько - либо документ кем-то заблокирован, либо его кто-то уже изменил. Ну а дальше - уже и так понятно. IMHO кривой вариант. Почему проверка делается перед сохранением документа а не перед началом редактирования? Это приведет к тому, что документ смогут начать редактировать одновременно несколько человек. Если процесс редактирования документа будет долгим, то можно при такой реализации получить кучу нецензурной брани в свой адрес. Ну простейшая же логика! зачем велосипеды придумывать? 1. Просматривать документ может любое количество человек одновременно 2. Открытая на просмотр форма документа не делает самопроизвольное изменение отображения. Просмотр статичен, что бы там ни делали другие с этим документом. 3. Перед началом редактирования документа форма делает следующее: а) проверяет, не поменялся ли документ с момента открытия на просмотр. Если поменялся, то пользователь об этом предупреждается и форма загружает свежую версию на просмотр. б) Пытается получить блокировку документа для редактирования. Если не получается - ругается, сообщая почему (кто и с какого момента сейчас правит этот документ) 4. При отмене редактирования форма просто убирает свою блокировку 5. При сохранении после успешного завершения форма просто убирает свою блокировку Блокировку прикладного уровня нет смысла завязывать на серверные блокировки. Делается элементарная таблица блокировок: что именно, кем, когда заблокированно. Делается процедура типа LockObject(тип объекта, код объекта), которая делает поиск соответствующей записи в блокировках. Если не находит, то создает новую. Если находит, то ругается, сообщая кем заблокировано. Соответственно делается еще процедура UnLockObject Плюс нужен механизм отработки аварийного завершения клиента для очистки зависших блокировок. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 13:33 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Александр ГoлдунНу простейшая же логика! зачем велосипеды придумывать? IMO вы описали [действительно распространенный и в общем неплохой] способ решить проблему, которая лежит не в области IT поддержки. Почему в один момент времени разные пользователи могут редактировать один документ ? Пускай бизнес хорошо подумает над этим казалось бы детским вопросом, а подумав выбирает из двух вариантов: 1 либо "кто последний - тот и прав". 2 либо храним историю изменения документа. На эти 2 варанта еще накладываются различные статусы документа. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 13:53 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
> Я вижу три пути: Как это обычно бывает, правильный путь - четвертый. ;) Если конкурирующие версии документов - редкая ситуация, есть смысл реализовать первый из перечисленных вариантов. Если конкурирующие версии документов - обычная практика, есть смысл подумать над более общим решением, позволяющим не терять изменения, сделанные любым пользователем. Посмотрите, например, как работает Subversion. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 14:37 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Александр Гoлдун пишет: > А вот это плохо. Если бы было непакетное, можно было бы просто > оставить все на мелких атомарных консистентных транзакциях. > > > Почему плохо? Я бы сказал наоборот: это единственный правильный вариант. Я не люблю блокирование вообще. Я думаю что оно не нужно в 90% случаев. А так надо вообще блокировать документ эксклюзивно по хорошему, даже на чтение. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 15:37 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Распространённые варианты. 1. Блокировка записи перед её изменением. Если запись уже изменена другим пользователем, система предлагает сделать повторный запрос, чтобы локальный буфер соответствовал сосотоянию БД, или отказаться от затеи. Если запись заблокирована другим пользователем, пользователь получает сообщение и может повторить попытку заблокировать запись, или отказаться от затеи. В данном случае блокировка может существовать длительное время, препятствуя работе других пользователей. С другой стороны при хорошей постановке документооборота за разработку документа в определённый период времени отвечает только один пользователь, поэтому такой режим не вызывает проблем. 2. Неблокирующее изменение записи. Запись изменяется в локальном буфере без блокировки, а затем сохраняется с проверкой на предмет изменения конкурирующим пользователем. Могут проверяться только ключевые поля (PK), PK и изменённые поля или все поля записи. Тут пользователь может проигнорировать чужие изменения, может отказаться от затеи. Если запись с данным PK не найдена, то считается что она удалена и изменить её нельзя. Такой подход хорош для Web приложений, когда системную блокировку установить проблематично, а программировать прикладные блокировки нецелесообразно. 3. Продвинутые системы управления версиями документов позволяют параллельно редактировать документы (их части), а затем сливать изменения. В простых случаях слияние может происходить автоматически. В случае конфликта, слияние делает пользователь системы. Если документы большие и требуют много времения на редактирование создать и удерживать системную блокировку практически невозможно. Как правило, пользователь с помощью разделяемой прикладной блокировки получает предупреждение, что ктото уже забрал документ на редактирование. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 16:52 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Ну что можно сказать по этому поводу: как весь мир делится на оптимистов и пессимистов, так и наше приложение может относиться к одной из этих сторон. Если это оптимистически настроенное приложение, то оно будет предполагать, что во время работы одного пользователя, с начала внесения им изменений и до их сохранения, другой пользователь не тронет те же данные, и, соответственно, оно не будет тратить ресурсы на установку блокировок. Естественно, надежды приложения на то, что другой пользователь ничего с редактируемыми нашим пользователем записями не сделал, могут не оправдаться, поэтому перед собственно сохранением изменений приложение должно проверить, а не изменились ли данные, пока наш пользователь их изменял, кем-то еще. Если вдруг такое случилось, приложение должно информировать нашего пользователя о том, что произошел "Уп-пс" и далее действовать по ситуации (в простейшем случае пользователя можно просто поставить перед фактом, что его изменения внесены не будут, потому что кто-то другой успел раньше; в более сложном пользователю можно показать чужие изменения и предложить выбрать, записать ли его изменения поверх чужих или нет; наконец, иногда приложение может обладать каким-то интеллектом и решить, как действовать, самостоятельно). Пессимистически настроенное приложение предполагает, что вероятность совместного редактирования велика, поэтому оно ставит блокировку сразу же, как только наш пользователь начнет редактирование, и снимает ее только после того, как изменения будут сохранены. Это гарантирует от набивания данных впустую, но зато в таких приложениях бывают проблемы длинных перекуров. Когда один пользователь начал работу с документом утром, потом его отвлекли, и далее до вечера он не вспоминал о том, что что-то по его вине заблокировано, а все прочие пользователи, которые тоже хотели внести изменения в те же записи, сильно ругались. Приложение, написанное подобным образом, должно либо предоставлять возможность администратору снять долгую блокировку, либо делать это автоматически, например, по превышении периода ожидания реакции пользователя. ________ Не дадим распространиться заразе политкорректности! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 16:54 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
guest_20040621 Если конкурирующие версии документов - редкая ситуация, есть смысл реализовать первый из перечисленных вариантов. Если конкурирующие версии документов - обычная практика, есть смысл подумать над более общим решением, позволяющим не терять изменения, сделанные любым пользователем. Посмотрите, например, как работает Subversion. Красиво звучит, но плохо представляю себе на практике. Вернемся с небес на землю, возьмем для примера банальнейший документ - накладную. Что такое конкурирующие версии накладной? Или может есть какие-то более удачные примеры? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 17:28 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Александр Гoлдун пишет: > такое конкурирующие версии накладной? Или может есть какие-то более > удачные примеры? Вот и я говорю, что все равно всегда административными методами разруливается. т.е. абсолютно согласен с предыдущим оратарам. Небывает конкурирующих версий накладных. Есть ответственный чел, который ее делает. Если он уже ее не делает, то это его начальник. И т.п. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 17:35 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
> плохо представляю себе на практике Прайс-лист себе хорошо представляете? Представляете, как один сотрудник меняет розничные цены, второй - оптовые, третий - крупнооптовые? Договор представляете? Можете представить, что юрист пишет раздел "ответственность сторон", а менеджер вносит изменения в "условия поставки"? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 18:04 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
MasterZiv Александр Гoлдун пишет: > такое конкурирующие версии накладной? Или может есть какие-то более > удачные примеры? Вот и я говорю, что все равно всегда административными методами разруливается. т.е. абсолютно согласен с предыдущим оратарам. Небывает конкурирующих версий накладных. Есть ответственный чел, который ее делает. Если он уже ее не делает, то это его начальник. И т.п. Posted via ActualForum NNTP Server 1.4 Для документов я не вижу смысла в многоверсионности. Однако для разработки ПО, в этом может быть смысл. Например можно иметь и развивать несколько версий исходника. Оракл сейчас поддерживат версии 9i, 10g и разрабатывает 11g, таким образом могут быть актуальными минимум 3 версии исходников. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 18:09 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
guest_20040621> плохо представляю себе на практике Прайс-лист себе хорошо представляете? Представляете, как один сотрудник меняет розничные цены, второй - оптовые, третий - крупнооптовые? Договор представляете? Можете представить, что юрист пишет раздел "ответственность сторон", а менеджер вносит изменения в "условия поставки"? А при чём тут разные версии? Это не версии, а части документа которые потом объединяются простой конкатенацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 18:10 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
guest_20040621> плохо представляю себе на практике Прайс-лист себе хорошо представляете? Представляете, как один сотрудник меняет розничные цены, второй - оптовые, третий - крупнооптовые? Договор представляете? Можете представить, что юрист пишет раздел "ответственность сторон", а менеджер вносит изменения в "условия поставки"? Тут уже все разделено организационно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 18:12 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
> Тут уже все разделено организационно. Это пример простых документов, для которых коллективная работа имеет смысл. По поводу "все разделено организационно" - представьте, что изменения, скажем, в розничный прайс-лист вносятся не одним сотрудником, а несколькими. Причем, территориально рабочие места разнесены. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 18:31 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
guest_20040621> Тут уже все разделено организационно. Это пример простых документов, для которых коллективная работа имеет смысл. По поводу "все разделено организационно" - представьте, что изменения, скажем, в розничный прайс-лист вносятся не одним сотрудником, а несколькими. Причем, территориально рабочие места разнесены. Да все равно, документы такого типа - композитные по сути своей. Вот хорошо было б если документ сам управлял собой. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 18:44 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Сахават ЮсифовВот хорошо было б если документ сам управлял собой. :) Документ по сути своей объект пассивный. Для управления документом служат менеджеры транзакций, системы контроля версий и т.д. Какие в них правила заложены, так они документом и управляют. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 19:00 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
> документы такого типа - композитные по сути своей А любые документы - они композитные. В том смысле, что могут быть представлены набором элементарных сущностей. Если доступ к ним (элементарным сущностям) может быть разделен административно - хорошо. Если нет - значит, нужны другие методы контроля. Для обычных файлов контроль версий - не фокус. Для СУБД - да, несколько геморройное занятие. Причем, на самом деле для практических задач его можно свести к регистрации изменений и приоритетам так, чтобы ручной работы было очень немного. > Вот хорошо было б если документ сам управлял собой В смысле "сам управлял собой"? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 19:12 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Меня лично напрягают все эти СУБД. По мне бы - разделить ведение документа от его анализа. Каждый документ имел бы какие-то теги (авторы, допущенные, к каким частям, на какие действия и т.д.). Менеджер этого дока управлял бы доступностью (кто запрсил, с какими намерениями менял бы видимость или статус для изменений и т.д.), и параллельно выводил бы в отделнюю БД части для анализа на которые есть подписка и управлял бы синхронизацией этих частей. Так сумбурно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 19:19 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
> Каждый документ имел бы какие-то теги Нет смысла реализовывать это в реляционных структурах. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 19:32 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
guest_20040621> Каждый документ имел бы какие-то теги Нет смысла реализовывать это в реляционных структурах. Я и не собираюсь. Был бы заказ, реализовал бы БД активных документов. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 19:36 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
guest_20040621> плохо представляю себе на практике Прайс-лист себе хорошо представляете? Более чем хорошо И представляю, и имел честь проектировать, разрабатывать и внедрять. guest_20040621 Представляете, как один сотрудник меняет розничные цены, второй - оптовые, третий - крупнооптовые? Рассматривал как 3 разных прайса. guest_20040621 Договор представляете? Можете представить, что юрист пишет раздел "ответственность сторон", а менеджер вносит изменения в "условия поставки"? Ага, а еще бывают приложения к договору и т.п. Здесь все проще и проблемы, которую можно было бы решить версионностью, нет. Как тут уже отметили, явный пример композитного документа. Можно разделить организационным путем, можно вообще на уровне интерфейса на разных рабочих местах сделать разные формы работы с документом. guest_20040621 Это пример простых документов, для которых коллективная работа имеет смысл. По поводу "все разделено организационно" - представьте, что изменения, скажем, в розничный прайс-лист вносятся не одним сотрудником, а несколькими. Смутно представляю необходимость именно одновременного внесения изменений в прайс. Если это мелкие изменения, тогда все отлично сериализуется. Типа один менеджер правит пару позиций, другой в этот момент тоже пытается, но натыкается на блокировку. Подождет пару минут - сможет редактировать. В крайнем случае скажет-позвонит-напишет коллеге, на котором блокировка, поинтересовавшись надолго ли guest_20040621 Причем, территориально рабочие места разнесены. Верно подмечено, сам хотел привести подобный пример. Если территориальное разнесение подразумевает, тем не менее, онлайновую работу с единой БД, тогда не вижу разницы. А вот в случае распределенных БД, да еще и с off-line репликацией - тогда да, есть такая проблема. В данном случае не получается элегантно сделать удобный механизм блокировок, как я описал ранее. Вариантов в таком случае мало: 1. Предложенный вами вариант с версионностью. Достаточно нетривиален в реализации и регламентах отработки конфликтов 2. Организационное решение. Ну, тут все понятно. Четко разделяем области ответственности, например по набору реквизитов документа или же по статусам. 3. Все таки механизм блокировок. Но оправданность такого механизма для офф-лайн случая тяжело придумать. Реализовать то можно, но если расписание обмена скажем минут 20, то получить подтверждение о возможности редактирования можно будет за 20-40 минут. Я для территориально разнесенных баз стараюсь обходиться организационным способом. Крайне редкие случаи, когда нет возможности разделить, до сих пор решались "телефонной блокировкой" ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 20:36 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Александр ГoлдунВ крайнем случае скажет-позвонит-напишет коллеге, на котором блокировка, поинтересовавшись надолго ли Другой вариант. -- Ааааа!!! Система не работает, сделать ничего нельзя, во всём виноваты программисты!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 20:56 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
mcureenab Александр ГoлдунВ крайнем случае скажет-позвонит-напишет коллеге, на котором блокировка, поинтересовавшись надолго ли Другой вариант. -- Ааааа!!! Система не работает, сделать ничего нельзя, во всём виноваты программисты!!! Это уже вопрос не технический, а кадровый. Надо уметь воспитывать пользователей :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 21:01 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Александр Гoлдун mcureenab Другой вариант. -- Ааааа!!! Система не работает, сделать ничего нельзя, во всём виноваты программисты!!! Это уже вопрос не технический, а кадровый. Надо уметь воспитывать пользователей :) Хотя, если пользователю выскакивает маловнятное сообщение об ошибке, тогда он прав - виноваты программисты. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 21:07 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
> Ага, а еще бывают приложения к договору и т.п. Здесь все проще и проблемы, которую можно было > бы решить версионностью, нет. Еще как есть. Простой пример: тот же договор с приложениями. Часть приложений - стандартные файлы, лежат себе где-нибудь на ftp, часть приложений - лежат в системе контроля версий. Часть договора - в базе данных. Как Вы это все вместе собираетесь разгребать? Откуда версионность? - любой серьезный договор. Он согласовывается не раз, не два и не три. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 21:31 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Eugene7Есть БД, и 5-10 клиентов к нему подключенных. Как лучше сделать синхронизацию изменений одного и того же документа, если он редактируеться с двух разных клиентов в одно и то же время? А если разбить редактирование документа на блоки? И сохранять данные не по всему доку, а поблочно? И здесь легко организовать обновление блоков, измененных другими юзерами. А одновременное редактирование одной и той же записи блока считать диверсией, блокировать автоматом и ЖУРИТЬ юзеров? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 21:41 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Borodat Eugene7Есть БД, и 5-10 клиентов к нему подключенных. Как лучше сделать синхронизацию изменений одного и того же документа, если он редактируеться с двух разных клиентов в одно и то же время? А если разбить редактирование документа на блоки? И сохранять данные не по всему доку, а поблочно? И здесь легко организовать обновление блоков, измененных другими юзерами. А одновременное редактирование одной и той же записи блока считать диверсией, блокировать автоматом и ЖУРИТЬ юзеров? Если блоки логически независимы, то можно и так, но тогда задача просто уходит на уровень блоков. Если блоки логически связаны, например один блок содержит исходные данные для создания другого блока, то несогласованное редактирование таких блоков приведёт к нарушению целостности. Тогда полезно поддерживать версионность и связи версий блоков. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 21:49 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
mcureenab Если блоки логически связаны, например один блок содержит исходные данные для создания другого блока, то это не редактирование а проводка. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 22:25 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
mcureenab Что за проводка? На сколько Ампер? А ефто по потребношти. Если блок есть исходные данные для друго блока, мы запрещаем корректировку блока исходных данных (не фатально, а до специального разрешения от отвественного юзера) в тот момент, как появились подтвержденные ответственным юзером следствия. (явная рекурсия по юзерам ха ха ха) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2007, 23:06 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
guest_20040621> Ага, а еще бывают приложения к договору и т.п. Здесь все проще и проблемы, которую можно было > бы решить версионностью, нет. Еще как есть. Простой пример: тот же договор с приложениями. Часть приложений - стандартные файлы, лежат себе где-нибудь на ftp, часть приложений - лежат в системе контроля версий. Часть договора - в базе данных. Как Вы это все вместе собираетесь разгребать? Откуда версионность? - любой серьезный договор. Он согласовывается не раз, не два и не три. Вопрос целесообразности ведения этих версий БД. В системах документооборота возможно это актуально. Но чаще всего подобного рода работа ведется либо за пределами системы, а в базе уже фиксируется конечный вариант, либо все-таки все стадии проходят через БД, но опять таки, остается только конечный вариант. Разумеется, возможны частные случаи, когда в системах подобная работа отражается с максимальной детализацией, но мне не знакомы ни такие системы, ни примеры, где такое необходимо. Может быть потому что не приходилось очень плотно заниматься проблемами серьезных юридических отделов. Кроме договоров примеры есть? В других направлениях тоже можно увидеть отдаленное подобие версионности, но обычно выхолощенное до органиченного набора атрибутов документа. Например обычный заказ на поставку тоже ведь может проходить различные этапы согласования, корректировки и т.п. Но для целей работы и последующего анализа вполне может оказаться достаточно зафиксировать что хотели - заказанное кол-во и желаемые сроки, что подтвердил поставщик - согласованное кол-во и подтвержденная дата, ну а дальше уже что реально и когда получили. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 00:38 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
> Вопрос целесообразности ведения этих версий БД Если сложный документ связан с данными, то других вариантов, собственно, и нет. > мне не знакомы ни такие системы Мне тоже. > Кроме договоров примеры есть? Не думал об этом. В принципе, любые документы так можно готовить. Насколько это нужно и нужно ли вообще - сложно сказать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 01:45 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
1.Блокировка для того, чтобы другой пользователь не мог изменить документ - не более чем иллюзия, придуманная для того, чтобы каким-то образом обосновать неспособность разрулить ситуацию по полномочиям. Если более одного пользователя имеют полномочия на редактирование документа, то блокируй-не блокируй... в итоге документ будет в том виде, который ему придаст пользователь, редактировавший его последним. В случае с блокировкой ему просто придется подождать, чтобы сделать задуманное. Т.е., кроме ненужных пухлых алгоритмов этот метод ничего не дает. 2. Разруливание по полномочиям исключает всякие коллизии. 3. Вполне достаточно действий по принципу "кто последний, тот и прав", а если и нужно поддерживать чистоту рядов то: 3.1 Пользователь может сохранять изменения только в документе, автором которого он же и является 3.2 Пользователь может сохранить изменения если документ ранее был сохранен пользователем с полномочиями ниже или равными (см. рис). Александр ГoлдунВопрос целесообразности ведения этих версий БД. В системах документооборота возможно это актуально. Но чаще всего подобного рода работа ведется либо за пределами системы, а в базе уже фиксируется конечный вариант, либо все-таки все стадии проходят через БД, но опять таки, остается только конечный вариант. Разумеется, возможны частные случаи, когда в системах подобная работа отражается с максимальной детализацией, но мне не знакомы ни такие системы, ни примеры, где такое необходимо. Может быть потому что не приходилось очень плотно заниматься проблемами серьезных юридических отделов. Система визирования документов. Это обычная ситуация для подобных систем. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 12:13 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
> Если более одного пользователя имеют полномочия на редактирование документа, > то блокируй-не блокируй... Валера, я давал ссылку на Subversion. > Система визирования документов. А что система визирования? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 12:21 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
iscrafm ... Полномичия тоже запросто может привести к коллизиям. Вопрос даже не в том, что какой вид имеет документ в конце (оставим), а в том, что исключить мартышкин труд. Секретарь -> Зам -> Шеф В итоге один из шефов мартышка. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 12:27 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Сахават Юсифов iscrafm ... Полномичия тоже запросто может привести к коллизиям. Вопрос даже не в том, что какой вид имеет документ в конце (оставим), а в том, что исключить мартышкин труд. Секретарь -> Зам -> Шеф В итоге один из шефов мартышка. -> Зам -> Шеф паралельно. Другое дело если полномочия в разрезе частей документа. А еще лучше, когда документ сам управлет этими полномочиями. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 12:30 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
guest_20040621 Валера, я давал ссылку на Subversion. помню об этом :) Все таки CVS несколько другая тема по отношению к хоз. документам. Я имею ввиду именно их. guest_20040621 А что система визирования? в ней сохраняются все варианты документа, с комментариями и изменениями, заканчивая подписанным оригиналом. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 13:01 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Сахават ЮсифовВ итоге один из шефов мартышка. почему Сахават? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 13:07 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Сахават Юсифов А еще лучше, когда документ сам управлет этими полномочиями. у нас нет пока ООБД в нормальных реализациях для этого (сохранения умных сущностей в плоской РСУБД). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 13:07 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
iscrafm1.Блокировка для того, чтобы другой пользователь не мог изменить документ - не более чем иллюзия, придуманная для того, чтобы каким-то образом обосновать неспособность разрулить ситуацию по полномочиям. Да, иногда нет возможности полностью исключить возможность одновременной правки организационным путем или полномочиями. Ни разу не приходилось сталкиваться с документооборотом хотя бы в тысячи однотипных документов в день, когда большое число исполнителей одновременно обрабатывают общий пакет документов, внутри которого сделать жесткое разделение на все времена практически нереально? iscrafm Если более одного пользователя имеют полномочия на редактирование документа, то блокируй-не блокируй... в итоге документ будет в том виде, который ему придаст пользователь, редактировавший его последним. В случае с блокировкой ему просто придется подождать, чтобы сделать задуманное. Мы о чем рассуждаем? Об уменьшении вероятности ошибок из-за коллизий или о предотвращении умышленного вредительского саботажа, типа "а я все равно испорчу, что там коллега наваял"? Если второе, то комплекс мер для предотвращения подобного выглядит совершенно по другому. iscrafm Т.е., кроме ненужных пухлых алгоритмов этот метод ничего не дает. Пухлых? Реализация механизма в разы проще, чем описание на словах. А использование в документах - так вообще один вызов функции перед началом редактирования и один вызов по завершении. Где пухлость? iscrafm 2. Разруливание по полномочиям исключает всякие коллизии. как уже сказал, возможно далеко не всегда iscrafm 3. Вполне достаточно действий по принципу "кто последний, тот и прав", Недостаточно iscrafm а если и нужно поддерживать чистоту рядов то: 3.1 Пользователь может сохранять изменения только в документе, автором которого он же и является еще раз говорю, это приемлемо только для простых орг структур с ограниченным числом исполнителей. Типа один продажник, один закупщик, один кладовщик и т.п. Реальность же часто бывает неизмеримо сложнее. iscrafm 3.2 Пользователь может сохранить изменения если документ ранее был сохранен пользователем с полномочиями ниже или равными (см. рис). Неприемлено для документов, имеющих сложный жизненный путь. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 13:12 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
iscrafm Сахават ЮсифовВ итоге один из шефов мартышка. почему Сахават? Ну, я подумал, что у самого полномочий больше, чему у зама и соответственно работа зама впустую если они оба меняли одну и ту же часть документа.. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 13:13 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Александр Гoлдун ок, не буду разубеждать или спорить. Я просто рассказал каким образом мы обходимся без блокировок и как избегаем коллизий. И полномочия разруливаем. Да и системами маленькими в общем-то не занимаемся. Структуры сложные, раскиданы территориально... По-моему Вы немного преувеличиваете сам факт наличия проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 13:26 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Александр Гoлдун Неприемлено для документов, имеющих сложный жизненный путь. был бы признателен за расшифровку.. что Вы понимаете под "сложным жизненным путем" документа ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 13:30 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
> несколько другая тема Да. Но согласитесь, насколько удобно было бы всегда все изменения регулировать единым образом. Checkout - и абсолютно не заботит, где, как и почему хранятся документы; полная уверенность, что никакие изменения никогда потеряны не будут. Красота. ;) Вместе с тем, административные полномочия - это и правильно, и хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 14:06 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Сахават Юсифов iscrafm Сахават ЮсифовВ итоге один из шефов мартышка. почему Сахават? Ну, я подумал, что у самого полномочий больше, чему у зама и соответственно работа зама впустую если они оба меняли одну и ту же часть документа.. вот и получаются требования к системе (зависят от заказчика с увеличением сложности вниз): - возможность чтения ОДНОГО документа одновременно разными пользователями - возможность чтения части документов одновременно разными пользователями - возможность редактирования ОДНОГО документа одновременно разными пользователями а) переписывая раннего б) предупреждая б) предупреждая и сохраняя локально свой документ - возможность редактирования части документов одновременно разными пользователями то же самое, но с добавлением слияния подуровней ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 14:07 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
iscrafm Александр Гoлдун Неприемлено для документов, имеющих сложный жизненный путь. был бы признателен за расшифровку.. что Вы понимаете под "сложным жизненным путем" документа Да любой документ, имеющий больше статусов, нежели проведен-непроведен, когда в разных состояниях с ним могут работать разные люди. Какие-нибудь заявки, требующие согласования, утверждения и т.п. В таком варианте пункт: 3.2 Пользователь может сохранить изменения если документ ранее был сохранен пользователем с полномочиями ниже или равными (см. рис). может оказаться неприемлемым, так как вполне может оказаться, что в жизненном цикле документа более полномочный пользователь участвует раньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 15:46 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Александр Гoлдун Да любой документ, имеющий больше статусов, нежели проведен-непроведен, когда в разных состояниях с ним могут работать разные люди. Какие-нибудь заявки, требующие согласования, утверждения и т.п. В таком варианте пункт:..... может оказаться неприемлемым, так как вполне может оказаться, что в жизненном цикле документа более полномочный пользователь участвует раньше. пару ремарок: 1. Документ можно сохранить со своими разрешениями или назначить более низкие. Т.е. если у пользователя приоритет, допустим 5 и он хочет, чтобы нижестоящие могли после него внести изменения, то при сохранении он может выбрать от 0 до 5. Это так, образно. 2. я просто разделяю процесс подготовки документа и процессы его согласования, визирования и т.п. У документа есть Исполнитель , его и только его задача выдать на-гора нормальный документ. Для того, чтобы довести его до кондиции он постится в систему документооборота, где по определенному маршруту попадает к нужным людям. Но работают они с образом документа. Свои корректировки вносят путем подписей или замечаний к Исполнителю (см. рис), а не непосредственно в документ. Если каждый начнет править то что не нравится непосредственно в документе, то это я называю кашей. Поэтому и говорю, что все колизии можно (нужно) разруливать нормальной организацией процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 16:17 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
iscrafm Поэтому и говорю, что все колизии можно (нужно) разруливать нормальной организацией процесса. Да. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 16:21 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
IMHO не надо мешать вопрос многопользовательской работы с одним документом с вопросом прав на данные работы. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 16:41 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Petro123IMHO не надо мешать вопрос многопользовательской работы с одним документом с вопросом прав на данные работы. вопросы на самом деле взаимосвязаны. Простой пример подготовки документа двумя способами (см.рис): 1. К Плану закупок допускается сотня пользователей и они пытаются его редактировать его. Понятно, что вопросы многопользовательской работы с документом встают в полный рост. 2. У каждого пользователя есть индивидуальная заявка, которой он управляет. Ввел заявку, выполнил учет документа - процедура постинга в соответствии с указанной бизнес-логикой разместила ее в сводном Плане закупок (или отказала). Но заявку редактирует только ее Автор (Исполнитель). т.е. простой организацией архитектуры системы и оптимальной организацией процесса вопрос многопользовательской работы с одним документом ислючается из списка актуальных. Это я к чему... :) в той же Искре нет встроенных механизмов блокировки документов и не приходилось даже заморачиваться по этому поводу. Все вопросы решаются только указанным выше способом. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 17:19 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
авторВвел заявку, выполнил учет документа это если смотреть на Программу по учёту ДОКУМЕНТОВ (типа 1С). Там главная информация - это Документ. Поэтому надо не мешать одно с другим. Сначала надо чтобы Бизнес-логика определила что такое документ: - набор полей в СУБД - БЛОБ поле двоичное с классом Документ внутри - файл ХМL ванутри - *.doc - *.bmp Всё остальное будет плясать от этого. В том числе от Бизнес-процессов работы с этим документом. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 18:06 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Petro123 авторВвел заявку, выполнил учет документа это если смотреть на Программу по учёту ДОКУМЕНТОВ (типа 1С). Там главная информация - это Документ. Назовите это Бланк, Data Entry, Форма, Transaction Params, Ввводилка... если Вам не нравится слово Документ. Суть от этого не изменится. Речь идет о данных, которые нужно записать в БД. Какая разница в каком они виде. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 19:58 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
Eugene7 <...> Я вижу три пути: 1. Если кем то документ открыт на редактирование, другие могут открыть лишь на просмотр. То бишь при открытии проверять, открыт ли кем то еще, и если так, то дизаблить контролы. Можно посмотреть в CVS, SVN, VSS. Для каждого элемента, для к-рого нужно редактирование, независимое о "родительского" - свой файл. Всегда должен быть кто-то, кто может принять решение о том, что нужно пренебречь чужой работой и снять блокировку. Как вариант, "Пока Вы редактировали, данные изменились. Кода вы начинали редактировать, были XXX, теперь стали YYY, а вы хотите их сделать ZZZ. Сделать?" Eugene7 2. При сохранении менять лишь то, что было изменено. Но тут надо будет проверять, что же изменилось. Данных много. Придеться проходить проходить по всем данным и сверять, что тоже не очень нравиться. Либо сделать систему, которая регистрирует изменения. Но насмотревшись на это всяких вордах(где внес изменение, потом исправил обратно, а при закрытии он все равно считает что ты что-то изменил) тоже не в восторге. Можно посмотреть в MediaWiki. Но даже там - сначала разбиваете документ на разделы, а потом редактируете разделы независимо друг от друга. Eugene73. Если какой то параметр был изменен, обновлять его на других клиентах прямо в открытой форме. Тоже не очень нравиться решение(много сложностей с узнавание что что-то изменилось и обновлением этого). Можно посмотреть в ARIS Toolset, по крайней мере - 6.x: один пользователь изменил название элемента модели - у остальных отобразилось, кто изменил последним - тот и прав. Технически сложнее, чем (1), но вполне реализуемо. IMHO самый простой и привычный вариант - (1). Хотя кажется мне, что (1), (2) и (3) не являются взаимоисключающими. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2007, 23:06 |
|
Одновременное изменение документа
|
|||
---|---|---|---|
#18+
iscrafm Назовите это Бланк, Data Entry, Форма, Transaction Params, Ввводилка... если Вам не нравится слово Документ. Суть от этого не изменится. Речь идет о данных, которые нужно записать в БД. Какая разница в каком они виде. Материя первична (то биш ... ФОРМАТ данных для сохранения от БИЗНЕСА первичен). - документ - трамвайный билет (*.doc) - документ - трамвайный билет сканированный (*.bmp) - документ - трамвайный билет (*.xml) ТемаRe: Одновременное изменение документа или ТемаRe: Одновременное изменение частей документа ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2007, 10:03 |
|
|
start [/forum/topic.php?all=1&fid=33&tid=1549078]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
125ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
88ms |
get tp. blocked users: |
1ms |
others: | 249ms |
total: | 508ms |
0 / 0 |