powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как реализовать одновременное редактирование таблицы несколькими пользователями?
25 сообщений из 111, страница 3 из 5
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38794542
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы тоже обсудил требования - возможно получиться обойтись более простым решением - блокировка записи.

Иначе концептуально это выглядит так:
1. Есть клиент и сервер
2. Клиент имеет грид, с режимом просмотра (когда ячейку выделили) и режимом редактирования (когда на ячейку ткнули два раза и в ней появился курсор)
3. Когда ячейка вошла в режим редактирования - на сервер отправляется информация - ид записи, номер ячейки, флаг блокировки, кто блокирует
4. Сервер рассылает эту информацию другим клиентам
5. Каждый из клиентов находит у себя эту запись у себя и блокирует ячейку (обводит красным, блокирует режим редактирования и т.п.)

Есть два режима уведомления:
1. Когда клиент периодически запрашивает изменения с сервера
2. Когда сервер рассылает изменения клиентам

Первый вариант:
Минусы: может дать сбой, если период запроса изменений с сервера будет довольно большим (ну там 10 сек или минута), а если будет очень маленьким - возрастает нагрузка на сервер.
Как делать: на сервере таблица блокировок, каждый клиент каждую секунду/десять/минуту идет в эту таблицу, забирает обновления и обновляет свое состояние

Второй вариант:
Минусы: если отвалилась сеть - уведомление с сервера не дойдет, сбой, либо прикручивать систему подтверждения доставки уведомления.
Как делать: нужна рассылка, значит на сервере нужен список активных клиентов с их адресами, каждый клиент должен уметь принимать данные и обновлять свое состояние. На ходу на ум приходит две технологии рассылок - в сервере приложений, через сервер БД.

Сервер приложений: программный сервер, полностью пишется сам или используются готовые решения (ну например frozenmountain websync, signalr - хотя это для веба я использовал, можно погуглить для вин-формс, а в websync были примеры для нативных iOS приложений).

Сервер БД: его можно настроить на уведомления клиентов об изменении данных в таблицах, например в MS SQL это делается, насколько я помню, через data broker и SqlDependency - тогда каждый клиент настраивает для себя эту штуку и натравливает ее на MS SQL. В Oracle тоже есть нечто подобное.
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795327
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerP1983,

ВИПРОС владеет всей информацией о БД, ВИПРОС эту БД строит, потому он не только данные умеет синхронизировать без проблем, но и сливает разные модели, выделяет подсхемы в отдельные модели и т.д.
на самом деле оптимистическая стратегия - это просто отложенная пессимистическая с офигенным осложнением
потому я и сказал про приговор в том смысле, что все равно придется в пессимизме разрешать коллизии
несмотря на кажущуюся простоту, оптимизм намного сложнее чем пессимизм (конечно если не все время буркнуть фигню типа - "извините, данные уже накрылись вместо с вашими трудами", а реально попытаться разрешать коллизии)
но если прога нифига не сечет в семантике модели, не может на автомате перестроить данные, перезапустить обновления с учетом вновь поступивших и т.д. (т.е привести в семантически правильную форму), то разрешение коллизий автоматом - невыполнимая задача
потому я считаю что все эти ОРМ создали впечатление, что работа с БД - простая фигня
но так как вы тут воще то с БД не работаете, то в принципе вас эти вещи и не должны волновать, да и не волнует
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795329
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще, с подачи мальчика и поддакивания модераторов вы тут стали полными козлами
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795364
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterТаблица в пользовательском приложении представлена в виде сетки.
вся целиком?
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795519
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
Я не получил ответ на свой вопрос. Повторю вопрос, за 2 раза, видимо, смысл до тебя не дошел: покажи как решаются вопросы блокировки и разрешения коллизий в випрос. Мне не нужны тут рассуждения, про пессимистические и оптимистические блокировки, которые, кстати, описываются в приведенных мною ссылках (о ужас, випрос может оказаться детской поделкой). Просто покажи как випрос делает это. Про перестроить данные - бред, какой еще поискать надо. У тебя випрос циферки в финансовых документах сам по себе не перестраивает случаем? И, Саха, тут нет козлов, а вот опускаться до уровня оскорбления оппонентов - низко. И заметь, ты сам начал корчить из себя самого умного. Давай докажи теперь, что это так. Пока я вижу от тебя пердежи в лужу и бред, что странно наблюдать, от самого умного, не находишь?
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795535
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerP1983,
с оскорблений со своими пуками начал ты и продолжаешь
по теме
что тебе доказывать - то что информированный и уполномоченный алгоритм сильнее чем неинформированный и неуполномоченный?

ВИПРОС волею судеб изначально был построен для случаев дополнения и перестроения данных для получения осмысленных состояний модели при оффлайн работе, при котором невозможно ни по каким критериям построить очередь, обслуживания которой приводила бы валидному состоянию модели (можно в качестве примера посмотреть на работу версионника, которая пытается разрешить коллизии между версиями, но у него нет никакого ума, и вся информированность там заканичивается временными метками). Что бы такое было возможным было усилено понятие Модель, что привело к расширению и ужесточению ЕР модели, ООП парадигмы, использования РМД в целях хранения такой модели.
Это все описано в документации. Мало кто въезжает и видит выгоду, но пытаются в жизни пользоваться и пока что вроде более менее успешно. Дальше видно будет что с этим сделать.
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795553
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
Ну ты ж опять сливаешься. И ЕР ты хотя бы по-английски написал, а то ведь Единая Россия выходит. Вот зачем ты мне поришь околомаркетинговую чушь? Расширение ООП парадигмы у него. Как у тебя пользователи в один и тот же момент времени работают с одними и теми же данными, ты можешь на это ответить? ВОт ты пример привел с временной меткой, хороший пример. А в випрос то как это устроено? 4-й раз уже один и тот же вопрос задаю.
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795577
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerP1983,
ты просто не читаешь
"при одновременной" работе (т.е. все в онлайне) создается блокирующая очередь, это самый дешевый алгоритм синхронизации и тут не надо (ну, во всяком случае если не совсем хочешь отказаться от движков субд существующих, а так можно было бы и тут проанализировать запросы и перестроить очередь обслуживания, по возможности оттягивая время принятия решения) изобретать что либо
ну а в офлайне сначала строиться очередь обслуживания, которая приводит (обычно, так как изначально наложены запреты на ввод говна) к валидному состоянию
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795583
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
То есть ключевое "создается блокирующая очередь"? Я правильно понял, что это и есть pessimistic lock?
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795587
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerP1983,

ну да, это простейший случай синхронизации, если модель не позволяет себя нарушать и каждая транзакция во валидно меняет состояние модели или просто нет модели
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795591
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты типа пытаешься доказать что то амебное видение проблемы (поддержка валидного состояния модели при конкуренции) есть теория?
да там даже слово нет о модели. это черно-белое видение большой семантической проблемы
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795598
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
Теория (греч. θεωρία — рассмотрение, исследование) — учение, система идей или принципов. Можно ли назвать pessimistic и optimistic lock принципами? Я считаю, можно.
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795600
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerP1983,
я не против, тем более что ты не один
просто мне показалось, что тебя интересует решение проблемы, а не пути отфутболивания
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795818
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у MS SQL есть поле типа ROWVERSION (TIMESTAMP).

Оповещения нужно делать через сервер приложений. А уж как он там отслеживать будет изменения - это клиентов не парит. Хоть проводить все опреации через него, хоть через SqlDependency отслеживать изменения...
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38795876
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
Чтобы решить проблему, надо понять, что решать. У меня возникло ощущение, что топикастер вообще плохо разбирается в теме. Вот я и отправил его к истокам. Можно ли назвать это отфутолил, не знаю, но та информация была бы для него полезна, по моему мнению.
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38796565
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, прошу прощение за долгое отсутствие.

Мне подумалось вот что:
Заказчик не требует блокировки редактируемой записи. Только алерт о том, что она редактируется (кем то), и информацию о том, что она была отредактирована кем то, до того, как ты нажал кнопку "сохранить" на данной записи (ну или вышел из строчки грида, когда она была dirty, и она соответственно, полезла сохранятся [заказчик требует, чтобы "было как в excel"]).
Я так понимаю, что это - разные задачи.
Информация о том, что "пока ты телился - запись обновили", решается добавлением в табличку поля timestamp, ну и, соответственно, генерацией ошибки на уровне пишущей хранимки, если таймстампы в твоей копии и в таблице - отличаются. Ну и дополнительный режим этой хранимки "пишем всё равно, пофиг на изменения" (ну, когда затираем редактирование предыдущего пользователя). Тут, правда, наверное, надо будет еще подумать, как обыграть ситуацию, когда запись обновили еще раз, пока пользователь размышлял над ответом "затирать/не затирать".
Вторая задача - это, собственно, показать, что запись сейчас редактируется. Мне наилучшим решением видится, что все пользователи будут слать в некую таблицу ИД записи, ИД клиента, код захватил/отпустил.
Возможно, что туда же эту информацию будут слать триггеры after insert/update/delete, определенные на целевой таблице.
Сборщик мусора на сервере будет удалять из этой таблицы строки, относящиеся к тем, на которых уже нет блокировок (чтобы очередь не росла), возможно, с некоторым лагом.
На эту табличку думаю навесить select на клиенте с привязанной к нему Query Notification (не знаю что за зверь, буду курить). По идее, эта штуковина должна сообщать нам, если выборка на стороне сервера изменится.
Т.е., если нам прилетит сообщение от выборки, что она - поменялась, мы должны перечитать данные из таблицы "блокировок", расставить по другому значки редактирования и выборочно перечитать записи.
Остается проблема со сборкой мусора в случае сбоя клиента.
Частично это можно решить, думаю, так: Если клиент вошел в другую запись, то все его предыдущие блокировки - отменяются. Если клиент залогинился на сервер - то же самое. Если клиент обновил запись - то, видимо, он потерял ее блокировку.
Здесь везде блокировка - это "блокировка", т.е. ничего не блокируется, просто имеется информация о том, что с записью работает пользователь.
Проблема в том, что если клиент потерял коннект абнормально - вот тут ничего не сделаешь. Триггера на logoff у MSSQL вроде нету.

Не устоялось в голове.

Ткните в слабые места, пожалуйста!
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38796586
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster, а не проще-ли заказчику Google Docs или Office 365 использовать?
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38796593
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а какой смысл для пользователя видеть некое уведомление о том, что его запись сейчас кем-то редактируется?
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38796596
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС, посмотри тут (может тебе такое подойдёт решение):
Блокировка процедуры от повторного запуска
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38796607
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

...почему не хранить тогда версии, а окончательное сохранение истинной отдать на усмотрение главного/супервайзера/инспектора пожарной охраны? ... если никто не решится - сохранять последнюю ...
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38796643
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneа какой смысл для пользователя видеть некое уведомление о том, что его запись сейчас кем-то редактируется?
В общем, это требование заказчика. Они хаотически кусками обрабатывают один и тот же набор записей с разных машин.
Каждый пользователь, в общем, редактирует свой кусок данных и свою часть записи, но проблема в том, что они могут пересекаться.
Я понимаю, звучит не очень убедительно, но так есть.


carrotikuaggster,

...почему не хранить тогда версии, а окончательное сохранение истинной отдать на усмотрение главного/супервайзера/инспектора пожарной охраны? ... если никто не решится - сохранять последнюю ...
В общем, отредактированные записи всё равно будут сваливаться в "историческую" таблицу триггером. Проблема в том, что пользователь должен увидеть, что при одновременном редактировании он "успел позже".
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38796717
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterсвою часть записи
ТЗ - негодное, это понятно.

что есть своя часть записи?
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38796718
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster"успел позже".
это по-русски или по-болгарски написано?
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38796943
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилuaggsterсвою часть записи
ТЗ - негодное, это понятно.

что есть своя часть записи?
Некая информация, которая у него на бумажном документе. Она соответствует части строки или полной строке в той выборке, которую обрабатывает оператор. Проблема в том, что таких "слегка пересекающихся" частей может быть несколько (и в разных местах, у разных людей). Оператор, исходя из имеющихся на руках первичных документов должен решить, обновлять или нет запись, либо ограничится проставлением некого признака.
И да, нормализовать эту штуку - нельзя. Всё и так достаточно нормализовано. Просто стиль работы с документами несколько... ну вы поняли.
Изопропилэто по-русски или по-болгарски написано?
Зато понятно :)
...
Рейтинг: 0 / 0
Как реализовать одновременное редактирование таблицы несколькими пользователями?
    #38796982
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

17-77 в 16792084 по-моему, все хорошо расписал, плюсы и минусы.
Я сам больше склоняюсь к серверу приложений, так как это лучше подходит под требования, да и возможности там побогаче, например, уведомления и отслеживание разрыва связи делаются очень просто.
...
Рейтинг: 0 / 0
25 сообщений из 111, страница 3 из 5
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как реализовать одновременное редактирование таблицы несколькими пользователями?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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