:: Visual Foxpro, Foxpro for DOS
Обновление данных в многопользовательском приложении
FaustGreen

Сообщений: 124
Дата регистрации: 26.06.2023
Какие есть варианты реализовать обновление данных в многопользовательском режиме?

Допкстим есть сетевое приложение в котором есть форма "Товары".
1) Пользователь "Вася" открывает форму "Товары" и видит список товаров и их количество.
2) Пользователь "Петя" открывает форму "Товары" и видит список товаров и их количество.
3) В этот момент времени у обоих пользователей отображается одинаковый список товаров.
4) Пользователь "Вася" добавляет новую позицию в таблицу "Товары".
5) Когда и каким образом должны обновиться данные у пользователя "Петя"?
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
PaulWist

Сообщений: 14693
Дата регистрации: 01.04.2004
FaustGreen
5) Когда и каким образом должны обновиться данные у пользователя "Петя"?

В тот момент, когда Пете потребуется либо посмотреть на новый Товар, либо в момент фиксации транзакции с новым Товаром.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
FaustGreen

Сообщений: 124
Дата регистрации: 26.06.2023
Я не слишком глубоко знаю фокс. В мойем представлении все выглядит так:
Когда Вася изменяет данные на форме (например, добавляет новую запись), то у него на форме в гриде происходит изменения, так же как и в исходной таблице.
А у Пети в этот момент на форме в гриде отображаются данные на момент открытия формы, если он ничего не менял конечно (новая запись сама собой на появится).
И чтобы ему увидеть актуальные данные ему нужно обновить курсор/представлении (например, переоткрыть форму).

Вася же не может после добавление записи обновить представление у Пети?

PaulWist
В тот момент, когда Пете потребуется либо посмотреть на новый Товар
Это я так понимаю реализуется условно кнопкой на форме "Обновить"?

PaulWist
либо в момент фиксации транзакции с новым Товаром
Вот тут непонятно, данные меняет Вася, почему представление в этот момент должно измениться у Пети?

Т.е. варианты пока такие:
1) Перед тем как произвести какие либо изменения пользователь должен обновить представление/курсор (например, через нажатие на кнопке "Обновить").
2) Программа периодически (раз в минуту) или при определенных действиях (нажатии кнопки добавить/обновить/удалить запись) производит обновление представления/курсора или предварительно какой то опрос на предмет изменений, а потом уде обновление.

Может есть какой то способ Пете отлавливать момент фиксациции изменений сделанных Васей и в этот момент производить обновление данных?
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
FaustGreen

Сообщений: 124
Дата регистрации: 26.06.2023
Возможен ли такой вариант?:
Есть три пользователя (Петя, Вася, Саша).
При запуске приложения Вася и Саша "подписываются" на Петю.
Петя видит список подписавшихся на него, и после обновление шлет всем подписавшимся "уведомление", например "нужно обновиться".
У Вася и Саши на форме срабатывает событие "DataUpdated", которое тригерится в момент отправки "сообщения".
В обработчике события будет нужный нам код.

Или такой вариант: Петя после обновления данных у себя каким то оброзом получает ссылки на объекты формы Васи и Саши, и сам вызывает у них нужные методы?

Уверен на 99% что так делать нельзя, но мало ли ....

Пока из мыслей что такое:
Сделать общедоступный ресурс (таблица, ini-файл, ...), где хранить что то типа ID транзакции.
Каждый пользователь при старте формы читает этот ID.
При изменении каких то данных - инкрементирует.
Периодически опрашивает этот ID и сравнивает со своим локальным ID, и если они разные, то производит обновление. Это поидее быстрее, чем каждый раз без проверки изменений прводить обновление.
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
Владимир Максимов
Автор

Сообщений: 14123
Откуда: Москва
Дата регистрации: 02.09.2000
FaustGreen
Какие есть варианты реализовать обновление данных в многопользовательском режиме?

В общем случае, это всегда повторный запрос к общему хранилищу данных.

Другой вопрос, кто является инициатором этого запроса? Кто дает команду на то, что этот запрос надо сделать?

FaustGreen
Допкстим есть сетевое приложение в котором есть форма "Товары".
1) Пользователь "Вася" открывает форму "Товары" и видит список товаров и их количество.
2) Пользователь "Петя" открывает форму "Товары" и видит список товаров и их количество.
3) В этот момент времени у обоих пользователей отображается одинаковый список товаров.
4) Пользователь "Вася" добавляет новую позицию в таблицу "Товары".
5) Когда и каким образом должны обновиться данные у пользователя "Петя"?

Не корректно поставлен вопрос. Зависит от того, какую задачу решаем

Представь себе ситуацию, когда ты решил ввести новый товар или его количеств/цену. И вдруг, когда ты уже "занес мышку" картинка куда-то поехала, а числа начали меняться. Оказывается "кто-то там" решил все обновить. Вот лично тебе это понравилось бы?

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

Т.е. если ты не создаешь приложение-терминал, то вполне достаточно, чтобы сам пользователь "обновил картинку". Либо просто переоткрыв форму, либо по кнопке на форме
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
FaustGreen

Сообщений: 124
Дата регистрации: 26.06.2023
Владимир Максимов
Представь себе ситуацию, когда ты решил ввести новый товар или его количеств/цену. И вдруг, когда ты уже "занес мышку" картинка куда-то поехала, а числа начали меняться. Оказывается "кто-то там" решил все обновить. Вот лично тебе это понравилось бы?

Дельное замечание! Представил себе как это будет работать при 100+ пользователях одновременно )
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
Владимир Максимов
Автор

Сообщений: 14123
Откуда: Москва
Дата регистрации: 02.09.2000
FaustGreen
Периодически опрашивает этот ID и сравнивает со своим локальным ID, и если они разные, то производит обновление. Это поидее быстрее, чем каждый раз без проверки изменений прводить обновление.

Ну да. Это называется "номер версии" Если твоя версия устарела, то надо обновить данные

Только, а при чем здесь данные-то? Обычно так само приложение обновляют. Код приложения.

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

На уровне записи факт того, что эту запись обновил кто-то другой, в общем случае, реализуют при помощи специальных полей типа TimeStamp. Какое именно значение записано в этом поле - не важно (это может быть и счетчик). Важно то, что значение в нем меняется при любой модификации.

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

Но, зачастую, функции поля типа TimeStamp выполняют другие поля. Ну, там, статус документа, кто последний вносил изменения и т.п.

Буферизация, например, по умолчанию сравнивает значения тех полей, в которые вносили изменения (значение на диске с тем, что было до изменения)

if TableUpdate() = .F.
=AError(laError)
if laError[1] = 1585
* Те же самые поля были изменены другим пользователем
endif
endif

Т.е. способ реализации, и надо ли вообще что-то делать, зависит от самой задачи. Зачем Вам требуется такое принудительное обновление?
Ratings: 0 negative/3 positive
Re: Обновление данных в многопользовательском приложении
FaustGreen

Сообщений: 124
Дата регистрации: 26.06.2023
Владимир Максимов
Зачем Вам требуется такое принудительное обновление?
Я еще разок обдумал все, и действитьельно, а зачем оно мне ? )
Там можно подругому реализовать, и пользователи не пострадают.
Детали описывать не буду, долго ...
Спасибо!
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
AndyNigmatec

Сообщений: 1621
Откуда: Волгоград
Дата регистрации: 28.06.2015
Простой принцип: "Кто последний - тот и папа" (с)

А проверка на валидность/дубли/прочее - выполняется при добавлении/изменении записи либо приложением либо (что лучше на мой взгляд) самой БД, но правда если это фоксовая база то последнее ненадежно.



Исправлено 1 раз(а). Последнее : AndyNigmatec, 07.09.23 09:40
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
sphinx

Сообщений: 31616
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Можно сделать уведомление, что редактируемая запись изменилась. Правда, сам этого не делал.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
lemenev

Сообщений: 175
Дата регистрации: 23.06.2022
В ноябре прошлого года я перевёл для себя статью "Проблемы многопользовательской работы и буферизации данных". Мне кажется, она полностью раскрывает означенную тему.
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
PaulWist

Сообщений: 14693
Дата регистрации: 01.04.2004
Эта статья устарела на 25 лет, механизм описанный в ней реализует только одну стратегию TIL.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 1 раз(а). Последнее : PaulWist, 13.09.23 22:02
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
of63

Сообщений: 25599
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Проблемы многопользовательской работы и буферизации данных"
Основные тезисы привел бы хоть? Проблема (точнее это такое устройство мира, что вы что-то изменили, то не сразу отражается в ваших датчиках)
Да, есть проблемы (не мнгновенности)
И ? Ваши решения ?
youtu.be - пока не обосраться от страха, слушаю
youtu.be - изначальная точка



Исправлено 2 раз(а). Последнее : of63, 16.09.23 20:21
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
lemenev

Сообщений: 175
Дата регистрации: 23.06.2022
of63
Основные тезисы привел бы хоть?

Основные тезисы:
• Если кто-то другой изменил данные, то ты это сразу не увидишь.
• Если два разных человека редактируют разные записи, то это не проблема.
• Если два разных человека редактируют одну запись, но разные поля, то это не проблема.
• Если два разных человека редактируют в одной записи одно и то же поле, то это проблема. Приводятся рекомендации. Универсального решения нет.
Ratings: 0 negative/0 positive
Re: Обновление данных в многопользовательском приложении
Владимир Максимов
Автор

Сообщений: 14123
Откуда: Москва
Дата регистрации: 02.09.2000
lemenev

Основные тезисы:
• Если кто-то другой изменил данные, то ты это сразу не увидишь.
• Если два разных человека редактируют разные записи, то это не проблема.
• Если два разных человека редактируют одну запись, но разные поля, то это не проблема.
• Если два разных человека редактируют в одной записи одно и то же поле, то это проблема. Приводятся рекомендации. Универсального решения нет.

Правильно. Только следует иметь в виду, что это, так сказать, "технический" взгляд на проблему. Со стороны разработчика. Однако по бизнес-процессу (с точки зрения пользователя) могут быть другие требования к организации доступа на изменение данных разными пользователями

Т.е. следует понимать, что статья о том, какие физически есть возможности со стороны FoxPro. А как их использовать в конкретном приложении - это уже другой вопрос.

Собственно, автор темы как раз и "завис" когда захотел реализовать некие свои представления о "правильном". В данном случае помогло просто проговаривание проблемы вслух. Но иногда приходится и что-то свое делать
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика