Обновление данных в многопользовательском приложении | |
---|---|
FaustGreen Сообщений: 124 Дата регистрации: 26.06.2023 |
Какие есть варианты реализовать обновление данных в многопользовательском режиме?
Допкстим есть сетевое приложение в котором есть форма "Товары". 1) Пользователь "Вася" открывает форму "Товары" и видит список товаров и их количество. 2) Пользователь "Петя" открывает форму "Товары" и видит список товаров и их количество. 3) В этот момент времени у обоих пользователей отображается одинаковый список товаров. 4) Пользователь "Вася" добавляет новую позицию в таблицу "Товары". 5) Когда и каким образом должны обновиться данные у пользователя "Петя"? |
Re: Обновление данных в многопользовательском приложении | |
---|---|
PaulWist Сообщений: 14693 Дата регистрации: 01.04.2004 |
В тот момент, когда Пете потребуется либо посмотреть на новый Товар, либо в момент фиксации транзакции с новым Товаром. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Обновление данных в многопользовательском приложении | |
---|---|
FaustGreen Сообщений: 124 Дата регистрации: 26.06.2023 |
Я не слишком глубоко знаю фокс. В мойем представлении все выглядит так:
Когда Вася изменяет данные на форме (например, добавляет новую запись), то у него на форме в гриде происходит изменения, так же как и в исходной таблице. А у Пети в этот момент на форме в гриде отображаются данные на момент открытия формы, если он ничего не менял конечно (новая запись сама собой на появится). И чтобы ему увидеть актуальные данные ему нужно обновить курсор/представлении (например, переоткрыть форму). Вася же не может после добавление записи обновить представление у Пети? Это я так понимаю реализуется условно кнопкой на форме "Обновить"? Вот тут непонятно, данные меняет Вася, почему представление в этот момент должно измениться у Пети? Т.е. варианты пока такие: 1) Перед тем как произвести какие либо изменения пользователь должен обновить представление/курсор (например, через нажатие на кнопке "Обновить"). 2) Программа периодически (раз в минуту) или при определенных действиях (нажатии кнопки добавить/обновить/удалить запись) производит обновление представления/курсора или предварительно какой то опрос на предмет изменений, а потом уде обновление. Может есть какой то способ Пете отлавливать момент фиксациции изменений сделанных Васей и в этот момент производить обновление данных? |
Re: Обновление данных в многопользовательском приложении | |
---|---|
FaustGreen Сообщений: 124 Дата регистрации: 26.06.2023 |
Возможен ли такой вариант?:
Есть три пользователя (Петя, Вася, Саша). При запуске приложения Вася и Саша "подписываются" на Петю. Петя видит список подписавшихся на него, и после обновление шлет всем подписавшимся "уведомление", например "нужно обновиться". У Вася и Саши на форме срабатывает событие "DataUpdated", которое тригерится в момент отправки "сообщения". В обработчике события будет нужный нам код. Или такой вариант: Петя после обновления данных у себя каким то оброзом получает ссылки на объекты формы Васи и Саши, и сам вызывает у них нужные методы? Уверен на 99% что так делать нельзя, но мало ли .... Пока из мыслей что такое: Сделать общедоступный ресурс (таблица, ini-файл, ...), где хранить что то типа ID транзакции. Каждый пользователь при старте формы читает этот ID. При изменении каких то данных - инкрементирует. Периодически опрашивает этот ID и сравнивает со своим локальным ID, и если они разные, то производит обновление. Это поидее быстрее, чем каждый раз без проверки изменений прводить обновление. |
Re: Обновление данных в многопользовательском приложении | |
---|---|
Владимир Максимов Автор Сообщений: 14123 Откуда: Москва Дата регистрации: 02.09.2000 |
В общем случае, это всегда повторный запрос к общему хранилищу данных. Другой вопрос, кто является инициатором этого запроса? Кто дает команду на то, что этот запрос надо сделать?
Не корректно поставлен вопрос. Зависит от того, какую задачу решаем Представь себе ситуацию, когда ты решил ввести новый товар или его количеств/цену. И вдруг, когда ты уже "занес мышку" картинка куда-то поехала, а числа начали меняться. Оказывается "кто-то там" решил все обновить. Вот лично тебе это понравилось бы? С другой стороны, если ты только смотришь факт получения товаров, но ничего не меняешь, то как раз наоборот. Желательно, чтобы информация о получении отобразилась бы сразу в момент этого самого получения Т.е. если ты не создаешь приложение-терминал, то вполне достаточно, чтобы сам пользователь "обновил картинку". Либо просто переоткрыв форму, либо по кнопке на форме |
Re: Обновление данных в многопользовательском приложении | |
---|---|
FaustGreen Сообщений: 124 Дата регистрации: 26.06.2023 |
Дельное замечание! Представил себе как это будет работать при 100+ пользователях одновременно ) |
Re: Обновление данных в многопользовательском приложении | |
---|---|
Владимир Максимов Автор Сообщений: 14123 Откуда: Москва Дата регистрации: 02.09.2000 |
Ну да. Это называется "номер версии" Если твоя версия устарела, то надо обновить данные Только, а при чем здесь данные-то? Обычно так само приложение обновляют. Код приложения. Для данных "признак обновления" опять же зависит от того, какую задачу решаем. На уровне записи факт того, что эту запись обновил кто-то другой, в общем случае, реализуют при помощи специальных полей типа TimeStamp. Какое именно значение записано в этом поле - не важно (это может быть и счетчик). Важно то, что значение в нем меняется при любой модификации. Если после изменения данных в записи значение в этом поле оказалось отлично от того, что было в момент чтения, значит, запись была изменена другим пользователем. Но, зачастую, функции поля типа TimeStamp выполняют другие поля. Ну, там, статус документа, кто последний вносил изменения и т.п. Буферизация, например, по умолчанию сравнивает значения тех полей, в которые вносили изменения (значение на диске с тем, что было до изменения)
Т.е. способ реализации, и надо ли вообще что-то делать, зависит от самой задачи. Зачем Вам требуется такое принудительное обновление? |
Re: Обновление данных в многопользовательском приложении | |
---|---|
FaustGreen Сообщений: 124 Дата регистрации: 26.06.2023 |
Я еще разок обдумал все, и действитьельно, а зачем оно мне ? ) Там можно подругому реализовать, и пользователи не пострадают. Детали описывать не буду, долго ... Спасибо! |
Re: Обновление данных в многопользовательском приложении | |
---|---|
AndyNigmatec Сообщений: 1621 Откуда: Волгоград Дата регистрации: 28.06.2015 |
Простой принцип: "Кто последний - тот и папа" (с)
А проверка на валидность/дубли/прочее - выполняется при добавлении/изменении записи либо приложением либо (что лучше на мой взгляд) самой БД, но правда если это фоксовая база то последнее ненадежно. Исправлено 1 раз(а). Последнее : AndyNigmatec, 07.09.23 09:40 |
Re: Обновление данных в многопользовательском приложении | |
---|---|
sphinx Сообщений: 31616 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Можно сделать уведомление, что редактируемая запись изменилась. Правда, сам этого не делал.
------------------ "Veni, vidi, vici!"(с) |
Re: Обновление данных в многопользовательском приложении | |
---|---|
lemenev Сообщений: 175 Дата регистрации: 23.06.2022 |
В ноябре прошлого года я перевёл для себя статью "Проблемы многопользовательской работы и буферизации данных". Мне кажется, она полностью раскрывает означенную тему.
|
Re: Обновление данных в многопользовательском приложении | |
---|---|
PaulWist Сообщений: 14693 Дата регистрации: 01.04.2004 |
Эта статья устарела на 25 лет, механизм описанный в ней реализует только одну стратегию TIL.
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 1 раз(а). Последнее : PaulWist, 13.09.23 22:02 |
Re: Обновление данных в многопользовательском приложении | |
---|---|
of63 Сообщений: 25599 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Проблемы многопользовательской работы и буферизации данных"
Основные тезисы привел бы хоть? Проблема (точнее это такое устройство мира, что вы что-то изменили, то не сразу отражается в ваших датчиках) Да, есть проблемы (не мнгновенности) И ? Ваши решения ? youtu.be - пока не обосраться от страха, слушаю youtu.be - изначальная точка Исправлено 2 раз(а). Последнее : of63, 16.09.23 20:21 |
Re: Обновление данных в многопользовательском приложении | |
---|---|
lemenev Сообщений: 175 Дата регистрации: 23.06.2022 |
Основные тезисы: • Если кто-то другой изменил данные, то ты это сразу не увидишь. • Если два разных человека редактируют разные записи, то это не проблема. • Если два разных человека редактируют одну запись, но разные поля, то это не проблема. • Если два разных человека редактируют в одной записи одно и то же поле, то это проблема. Приводятся рекомендации. Универсального решения нет. |
Re: Обновление данных в многопользовательском приложении | |
---|---|
Владимир Максимов Автор Сообщений: 14123 Откуда: Москва Дата регистрации: 02.09.2000 |
Правильно. Только следует иметь в виду, что это, так сказать, "технический" взгляд на проблему. Со стороны разработчика. Однако по бизнес-процессу (с точки зрения пользователя) могут быть другие требования к организации доступа на изменение данных разными пользователями Т.е. следует понимать, что статья о том, какие физически есть возможности со стороны FoxPro. А как их использовать в конкретном приложении - это уже другой вопрос. Собственно, автор темы как раз и "завис" когда захотел реализовать некие свои представления о "правильном". В данном случае помогло просто проговаривание проблемы вслух. Но иногда приходится и что-то свое делать |
© 2000-2024 Fox Club  |