Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обновлении данных в многопользовательских программах [D7, IB6.x]


Страницы:   1 2

Vovovanych ©   (2004-05-11 08:58:00) 

Уважаемы Мастера! Вопрос об обновлении данных при многопользовательском использовании базы данных Interbase: имеется таблица, с которой очень активно работает десяток пользователей (добавляют, редактируют и удаляют записи). Как сделать (без повторного переоткрытия таблицы) чтобы у каждого пользователя была постоянно самая свежая и актуальная информация? Как считывать из базы именно добавленные или обновленные данные?


Locker   (2004-05-11 12:44:00) [21]

2 Sergey13
Прежде чем обвинять кого-то в хамстве - найдите повод обвинять!

Задача: Есть список (таблица) клиентов - физических лиц. В таблице - 50000 записей. Добавляем нового клиента. Скажем, 100 новых клиентов в день.
Вопрос: Как другим пользователям узнать, что в БД добавлен новый клиент? Обновлять все 50000 записей (хм...)? Или только запросить из БД новую запись? И как это сделать? Что проще: по 1 результирующей строке в запросе обновления, или по 50000 строк в каждом "ручном обновлении" кнопкой?

2 Desdechado
>> вот пользователь редактирует запись, а ему автоматически раз - и обновили ее
Для таких случаев в Pascal'e есть условный оператор:
if( notDataSet.State in[dsEdit, dsInsert]) then
begin
 // обновление
end;


Danilka   (2004-05-11 12:36:00) [22]

Как я люблю этот вопрос! :))

[10] Erik ©   (11.05.04 12:28)
Интересно, а как он узнает - нужно пользователю обновление или нет? Например, пользователь утром запустил приложение, открыл все формы какие есть и пошел кофу попить, а потом водки, и весь день АппСервер думает что пользователю нужно обновление?


Erik   (2004-05-11 12:28:00) [23]

Чего за фигня, я сделал обновление и все работает. У меня AppServer смотрит нужно ли пользователю обновление, если нужно вызывает CallBack передавая имя таблицы на клиента. Клиент смотрит какие формы подписались на даное событие и вызывает их метод обновления. Правда необходимось в обновлении у меня возникает не часто.


div   (2004-05-11 11:53:00) [24]

(ИМХО) использовать на всех клиентах транзакции no_rec_version. Однако я уверен что при этом возникнут проблемы с блокировками записей. Видимо нужно использовать в транзакции параметр wait. Что касается Event'ов - то если работа действительно интенсивная, и при каждом изменении/удалении производить обновление - то думаю что как минимум половина пользователей только и будут делать что ждать обновления данных. Поэтому думаю стоит зделать обновление либо "вручную", либо по таймеру (например раз в минуту, это зависит от объемов).


Sergey13   (2004-05-11 11:48:00) [25]

2Locker   (11.05.04 11:36) [5]
А вы братец - хам. Именно потому что знаю как это делается и говорю, что при поставленых условиях задача невыполнима. Выполнима, но с большими затратами при других условиях. Но в любом случае проблема надумана и реализовывать ее не стОит. Никому это не надо. Достаточно одной кнопки "Обновить".
А твои советы - ну от Locker-а чего еще ждать. 8-)


Desdechado   (2004-05-11 11:48:00) [26]

2 Locker
вот пользователь редактирует запись, а ему автоматически раз - и обновили ее. вот матюки будут...

и что, для каждой записи свой запрос на проверку обновления? для выборки из 200 строк - 200 запросов? тормоза обеспечены, особенно если это с интервалом в 1 мин делать.

а про миллион загнул - никто на клиенте с таким количеством не работает


Курдль   (2004-05-11 11:42:00) [27]


> Locker   (11.05.04 11:36) [5]

Примените к себе свой же совет, который адресовали Sergey13
Автору не интересно знать, когда-что было обновлено, а надо рассылать Event-ы клиентам, как только что-то обновилось. Этим занимаются и вправду тяжеловесные, и чаще всего не оправдывающие себя Application-серверы, либо некоторые DB-серверы. Главное для него - определить, насколько это нужно пользователям. Лично я, не зная бизнесс-процессов, за решение не возьмусь.


Locker   (2004-05-11 11:36:00) [28]

2 Vovovanych
Творите, выдумывайте, пробуйте... Решения задачи есть.
Вариант 1. Использование в каждой записи поля "Время последнего обновления". И выборка по этому полю. (Никогда не пробовал - может, и есть смысл, но, при большом количестве таблиц в проекте, будут тормоза с перебором таблиц).
Вариант 2. Использование таблицы синхронизации, в которую, при каждом изменении в других таблицах, вносится имя измененной таблицы и ключ записи. Кроме этого нужно автоинкрементное поле - для того, чтобы знать, с какой записи читать новые данные о синхрониации. И еще - таймер.

2 Sergey13
Не умеете сами - не мешайте другим...

2 stud

Сколько времени нужно на выборку одной записи из таблицы с миллионом записей? Посчитайте - и поймете, что синхронизация - это лучше, чем ручное обновление всейтаблицы: быстрее, незаметнее и траффик низкий.

2 Nikolay M.
Объясните, почему это не нужно?


stud   (2004-05-11 10:18:00) [29]

если пользователи активно работают с базой то большая часть времени будет уходить на обновление данных а нужно ли это?


Nikolay M.   (2004-05-11 09:38:00) [30]

Если трехзвенка, то все изменения идут через application-server, который рассылает изменения всем клиентам-подписантам.
То, что это будут тормоза, глюки и вообще скорее всего не нужно, говорить не буду - и так понятно.


Sergey13   (2004-05-11 09:29:00) [31]

2Vovovanych ©   (11.05.04 08:58)  
ИМХО, твои мечты из серии - "Миссия невыполнима".


Anatoly Podgoretsky   (2004-05-11 09:04:00) [32]

Без переоткрытия?
Добавить timestamp


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо