|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Доброго времени суток. Имеется: 1. Двухзвенное приложение (Клиент на C# 3.5 framework, BD: MS SQL 2005). 2. Проблемы с многопользовательским режимом работы с данными. Когда пользователи работают с одними и теми же данными с разных рабочих мест. 3. Самописная ORM библиотека. 4. Очень сложная БЛ на стороне клиента с кэшированными данными, полученными с БД. 5. ТЗ на проект нет, где бы описывалась многопользовательская работа с данными. Хотелось бы узнать кто и как решал такие вопросы на реальных проектах, интересует сколько не техническое решение, а сама концепция работы в многопользовательском режиме. Может существуют какие-нибудь стандарты? Например одна из многих проблем: что делать, если два пользователя с разных компьютеров параллельно загрузили какой нибудь корневой бизнес объект с БД, который загружает по иерархии много других сущностей в. Один пользователь удаляет корневой объект, который каскадно удаляет нижелещую архитектуру. Другой пользователь в это время параллельно работает с кэшированными данными порядка 3-4 часов, потом при попытки сохранить свои изменения неприятно удивляется. Проблемных сценариев достаточно много... Поделитесь опытом кто сталкивался с такими проблемами. Какие подходы к решению данных проблем предпринимали? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2011, 14:40 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
На стороне базы параллельная работа контролируется самим сервером БД. Очевидно, проблема в использовании тяжёлого клиента с кэшированными данными. Тоже интересно, у кого есть такой опыт. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2011, 15:35 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
LameUser4. Очень сложная БЛ на стороне клиента с кэшированными данными, полученными с БД. <............> Например одна из многих проблем: что делать, если два пользователя с разных компьютеров параллельно загрузили какой нибудь корневой бизнес объект с БД, который загружает по иерархии много других сущностей в. Один пользователь удаляет корневой объект, который каскадно удаляет нижелещую архитектуру. Другой пользователь в это время параллельно работает с кэшированными данными порядка 3-4 часов, потом при попытки сохранить свои изменения неприятно удивляется. 1) Не держать данные подолгу на клиенте: можно сделать commit - сделайте. Если не следовать этому правилу, то 2 часа работы пользователя А будут либо убивать результаты работы пользователя Б, либо нарушать согласованность данных. 2) кешированием и блокировками объектов должна заниматься либо БД, либо сервер приложений. Если не следовать этому правилу, либо данные не будут согласованы, либо клиенты должны непрерывно обмениваться сообщениями об изменении данных. И это обмен порядка NxN (каждый с каждым), вместо 1xN для сервера приложений. 3) Если использовать кеширование на клиенте, то БД или сервер приложений не должны доверять передаваемым данным (см. 1). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2011, 15:57 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
логически распределять данные для редактирования между пользователями, не давать "всем все" . Убирает коллизии на 99% ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2011, 16:09 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
LameUser3. Самописная ORM библиотека. за сабжем следит ОРМ, если он есть . Значит выкинуть или взять готовый ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2011, 23:33 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Petro123LameUser3. Самописная ORM библиотека. за сабжем следит ОРМ, если он есть . Значит выкинуть или взять готовый А могли бы вы поконкретнее описать сам процесс "слежения"? В чем он заключается? Был бы признателен, если бы вы дали какую-нибудь ссылку на конкретную информацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 06:36 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Petro123, а как орм это делает? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 07:18 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
ViPRosPetro123, а как орм это делает? почти так, как БД. Я бы сначала исследовал работу БД по сабжу (логические\физические блокировки...) Потом взял стандартный стек сишарповый, т.к. очень много завязано на выбранный ЯП. Сам я предпочитаю без ОРМ, БЛ в БД, и блокировками рулит БД. Инфа по ОРМ: http://dr-magic.blogspot.com/2010/01/3.html ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 10:50 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Расшифруйте п. 2 Сидят двое и колбасят в одном документе (не подозревая об этом) ? У нас ведется таблица занятых документов. Тот кто зайдет в д-т вторым, получит оповещение и режим ридонли. Есть возможность отправить оповещение первому юзеру "мол отпусти, а ?". Специальная логика следит, чтоб не возникало "зависших блокировок д-тов" (допустим юзер внезапно отвалился). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 10:52 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
тему о толстом клиенте: Я полностью согласен с мыслями Томаса Кайта из книги по ораклу о том, что вся ВОЗМОЖНАЯ логика работы приложения с данными должна реализовываться на стороне БД. моя работа ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 11:18 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
то есть клиент должен быть максимально тонким и максимально использовать возможности БД. моя работа ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 11:19 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Подчеркнутые имена, не являющиеся ссылками Чуть прыгающие пукты меню из-за неауккуратного расчета высоты "О компании" в траурной рамочке - это что бросилаось в глаза сразу. Хреновый хомячок. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 11:27 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
авторПодчеркнутые имена, не являющиеся ссылками Чуть прыгающие пукты меню из-за неауккуратного расчета высоты "О компании" в траурной рамочке Это сайт фирмы где я работаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 11:59 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Максим ОлеговичЭто сайт фирмы где я работаю. Не пойму, какое отношение он имеет к сабжу... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 12:05 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Никакого. Просто замечание о том, что вряд ли нужно выставлять напоказ подобное поделие. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 12:07 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Не держать данные подолгу на клиенте: можно сделать commit - сделайте. Если не следовать этому правилу, то 2 часа работы пользователя А будут либо убивать результаты работы пользователя Б, либо нарушать согласованность данных. Согласен Соответственно если уж делаете так, то по "забиранию объекта" отмечайте этот факт в базе. При повторном заборе уведомляйте "второго" пользователя, что он не сможет редактировать объект. Но вообще многочасовые задержки - это не хорошо. Проблем не избежать ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 12:26 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 13:34 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
OptiXМаксим ОлеговичЭто сайт фирмы где я работаю. Не пойму, какое отношение он имеет к сабжу... спамер ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 13:56 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
самая большая ошибка заключается, имхо конечно, в том, что вместо проектирования системы, которая по своей сути исключает необходимость в блокировках, придумываются сложные и в любом случае ненадежные механизмы маскировки проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 14:01 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
LSVСидят двое и колбасят в одном документе (не подозревая об этом) ? похоже. Вместо устранения проблем ищется путь их "замыливания". ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 14:03 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
LSVРасшифруйте п. 2 Сидят двое и колбасят в одном документе (не подозревая об этом) ? У нас ведется таблица занятых документов. Тот кто зайдет в д-т вторым, получит оповещение и режим ридонли. Есть возможность отправить оповещение первому юзеру "мол отпусти, а ?". Специальная логика следит, чтоб не возникало "зависших блокировок д-тов" (допустим юзер внезапно отвалился). Тут нет понятия "отдельного документа". БЛ приложения настолько сложная, что просто напросто не реализуема на стороне SQL сервера. К примеру один из модулей имеет возможность настройки всего-и-вся. (Создаются справочники пользователя, пользователь сам создает бизнес-сущности, формулы по которым считаются эти бизнес сущности, зависимость сущностей друг от друга (граф))), в формулы расчета сам колбасит ссылки на другие свойства других бизнес объектов приложения, некоторые из таких свойств тоже считаются весьма нетривиальным образом ) Наложено много ограничений и проверок полученных формул на корректность составления. Со стороны сервера это все хранится в древовидной структуре порядка 20 уровней вложенности. Даже если и реализовать на стороне БД - расширяемость такого решения весьма проблематично. А развитие довольно такие бурное. При том пользователь может создавать разные расчеты, которые между собой могут пересекаться общими объектами, а могут и не пересекаться... Другими словами тут вряд-ли получится спроецировать работу с данными на отдельно взятый документ. Интересная мысль насчет блокировок данных в БД... Думаю стоит подумать над этим. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 14:15 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
LameUserДругими словами тут вряд-ли получится спроецировать работу с данными на отдельно взятый документ. Другими словами у Вас построена собственная БД, которая зачем-то хранит свои словари в MS SQL Server. LameUserИнтересная мысль насчет блокировок данных в БД... Думаю стоит подумать над этим. Очень странно, что внутри Вашей собственной БД, изначально не реализовали собственные блокировки. Надо об этом подумать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 15:37 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Для протухания кэша при использовании SQL 2005 рекомендую использовать SqlCacheDependency позволяет крайне эффективно кэшировать данные внутри C# приложения ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 16:01 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
LameUserPetro123пропущено... за сабжем следит ОРМ, если он есть . Значит выкинуть или взять готовый А могли бы вы поконкретнее описать сам процесс "слежения"? В чем он заключается? Был бы признателен, если бы вы дали какую-нибудь ссылку на конкретную информацию. при загрузке объекта его блокировку делать не судьба? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 18:14 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
littleboxLameUserДругими словами тут вряд-ли получится спроецировать работу с данными на отдельно взятый документ. Другими словами у Вас построена собственная БД, которая зачем-то хранит свои словари в MS SQL Server. LameUserИнтересная мысль насчет блокировок данных в БД... Думаю стоит подумать над этим. Очень странно, что внутри Вашей собственной БД, изначально не реализовали собственные блокировки. Надо об этом подумать. +1 :) он не подозревает, что внутри БД тоже нет ДОКУМЕНТОВ. Там строки и колонки. Что он там будет блокировать? Создана уникальная система БЕЗ ограничений. Искусственный интеллект. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 18:22 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
выход вроде один. Если выделение и создание бизнес-сущности (сущности значимой для бизнеса) происходит без участия программиста - пользователем. То значит, бремя наложения блокировок, или разрешения захвата рессурса при конкурирующих потоках лежит тоже НА пользователе. Как сказал iscrafm, замыливание проблемы "на потом". ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 18:37 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Petro123Если выделение и создание бизнес-сущности (сущности значимой для бизнеса) происходит без участия программиста - пользователем. То значит, бремя наложения блокировок, или разрешения захвата рессурса при конкурирующих потоках лежит тоже НА пользователе. Как сказал iscrafm, замыливание проблемы "на потом". Думаю совершенно не важно, создал этот бизнес обьект программист или пользователь. Как минимум она(бизнес-сущность): 1)Древовидная, то есть имеет некоторого родителя 2)Должна вводится\редактироваться по частям что мешает на этапе 2) коммитить вводимую часть в базу и проверять наличие родителя? я бы еще и версию записи проверял в этот момент. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 18:47 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
NetObserver, как сложить песню из 7 нот? При стандартной разработке, я делаю таблицу "СписокДокументов". И для проверки версии, будет флаг в этом объекте или поле в БД (временная метка). Эта метка должна анализироваться в БЛ при сохранении. Это делает программист на этапе разработки. Если этого нет, то кто это делает? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 19:31 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Petro123ViPRosPetro123, а как орм это делает? почти так, как БД. Я бы сначала исследовал работу БД по сабжу (логические\физические блокировки...) Потом взял стандартный стек сишарповый, т.к. очень много завязано на выбранный ЯП. Сам я предпочитаю без ОРМ, БЛ в БД, и блокировками рулит БД. Инфа по ОРМ: http://dr-magic.blogspot.com/2010/01/3.html ты че это запостил то? я вроде знаю чо такое транзакция и т.д. где решение проблемы я спросил? могу и ответить :) токо организационно это фигня решается, через компромисс или регламент (у кого длинне):) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2011, 20:59 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Petro123littleboxпропущено... Другими словами у Вас построена собственная БД, которая зачем-то хранит свои словари в MS SQL Server. пропущено... Очень странно, что внутри Вашей собственной БД, изначально не реализовали собственные блокировки. Надо об этом подумать. +1 :) он не подозревает, что внутри БД тоже нет ДОКУМЕНТОВ. Там строки и колонки. Что он там будет блокировать? Создана уникальная система БЕЗ ограничений. Искусственный интеллект. Все обложенно ограничениями (Constraints, triggers и другие прелести). Данные хранятся только в правильном виде. Уртрировать не нужно. Вообще-то вопрос изначально стоит про концепцию многопользовательской работы уважаемый, а не про Ваши домыслы, про "данные без ограничений". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2011, 06:21 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Petro123NetObserver, как сложить песню из 7 нот? При стандартной разработке, я делаю таблицу "СписокДокументов". И для проверки версии, будет флаг в этом объекте или поле в БД (временная метка). Эта метка должна анализироваться в БЛ при сохранении. Это делает программист на этапе разработки. Если этого нет, то кто это делает? Общие родители конечно же есть (у нас именуются версиями, сразу не понял аналогию с "документами"). Что из себя представляет "метка" на физическом уровне? доп. колонка на каждую таблицу в БД? Смысл в этом в принципе есть, проставлять метки по мере редактировании (запросе на редактирование) определенных данных на клиенте. Но не все так просто, пользователь может взять данные на редактирование и забыть (заболеть).. Придется вводить человека из сопровождения с правами принудительного сброса флага блокировки данных. Как вариант пришла мысль, что все данные по умолчанию в режиме "чтения", при запросе на редактирование проставляется флаг во всех низлежащих по архитектуре данных "на редактирование". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2011, 06:40 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
LameUser, вы не поняли. Физически программист может на этапе разработки "что угодно". Если аналитик вменяемо сказал, что Документ - это такие-то реквизиты, то почти любой вариант можно смоделировать в ИС. Если у Вас определение разделяемого ресурса делает Пользователь, то кто и где будет вешать флажёк? авторУртрировать не нужно я и предлагаю, говорить конкретно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2011, 09:29 |
|
Проблема с многопользовательским режимом работы с данными
|
|||
---|---|---|---|
#18+
Petro123LameUser, вы не поняли. Физически программист может на этапе разработки "что угодно". Если аналитик вменяемо сказал, что Документ - это такие-то реквизиты, то почти любой вариант можно смоделировать в ИС. Если у Вас определение разделяемого ресурса делает Пользователь, то кто и где будет вешать флажёк? авторУртрировать не нужно я и предлагаю, говорить конкретно. Это уже техническая сторона вопроса. Пока только интересуют сами концепции работы с данными в многопользовательском режиме. Спасибо за ответы! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2011, 12:27 |
|
|
start [/forum/topic.php?all=1&fid=33&tid=1548071]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 336ms |
total: | 513ms |
0 / 0 |