![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать мгновенно? [D7, MySQL]
FBuilder © (2008-01-16 13:11:00)Есть база данных удаленное на по локальной сетке.
Есть таблица (SQL запрос), которая отображает ее состояние.
табилца отображается пользователю - он ее видит, может по ней пробежаться.
записей порядка 100.
проблема: табилца обновляется по такймеру - ра зв 3 секунды.
сейчас получается что это все занмиает около 250 при апдейте :( У пользователя соответственно гладкого перемещения по таблице - нет - при обновлении все замирает и скрол - дергается.
Вопрос: как добиться более гладкого хождения пользователя по обновляемой таблице?
Mysql 4.0.x, DBExpress, dbx4mysql.dll
?
Kolan (2008-01-16 14:55:00) [41]> 1. DisableControls/EnableControls отключают отрисовку при
> обновлении данных, что заведомо ускоряет процесс.
Все равно будет затык у пользователя, имхо надо запрос оптимизоровать Или UI менять
Skyle (2008-01-16 14:52:00) [42]
> FBuilder (16.01.08 14:41) [15]
> >Использовать DisableControls/EnableControls и клиентский
> курсор.
>
> Пробовал. Клиентский курсор - нет - это как на DBExpress
> рабоать точно будет?
А я не пользовался ни разу этими компонентами, не знаю какая у них логика.
Смысл был таков
1. DisableControls/EnableControls отключают отрисовку при обновлении данных, что заведомо ускоряет процесс.
2. Использование клиентского курсора нужно понимать как "фетчить все записи на клиента и там уже показывать".
Если в этом случае всё тормозит, то проблема не в клиенте. Это либо запрос, либо подтормаживает сервер, либо сеть. Соответственно можно будет попробовать изменить подход к запросу.
Я например не смогу даже в течение минуты вникать в 100 записей, обновляющихся раз в 3 секунды, чесслово.
FBuilder (2008-01-16 14:41:00) [43]>Использовать DisableControls/EnableControls и клиентский курсор.
Пробовал. Клиентский курсор - нет - это как на DBExpress рабоать точно будет?
Kolan (2008-01-16 14:05:00) [44]> только что-то с этой сменй дата сета пока трабла небольшая
А как я трабла поменял и се
Skyle (2008-01-16 14:04:00) [45]Использовать DisableControls/EnableControls и клиентский курсор.
FBuilder (2008-01-16 14:04:00) [46]Спасибо!
вот сейчас что-то подобное и пытаюсь сделать...
только что-то с этой сменй дата сета пока трабла небольшая...
ну а locate - да - немного протормаживает - но не так сильно как все остальное :)
Kolan (2008-01-16 14:00:00) [47]> там пару джоинов есть
Имхо тут основная проблемма. Может тебе завесли таблицу для мониторинга. В неё данные будут из осн. таблиц добавлять триггеры.
А запрос будет брать уже из этой таблицы. Будет быстрее.
> меня инетесует как теперь подменить так, чтобы я сначала
> эти данные получал в прогу, а потом мгновенно выводил в
> табилцу
Можно пропробовать, в кач. эксперимента пока нет других идей/людей.
Подключать надор динамически.
То есть два дата сета с одним работает пользователь, второй по таймеру открываешь и меняешь DataSet у DataSource.
Надо будет еще и запомнить где курсор у пользователя был и назад выставить
Тут скорее всего будет мигание неприятное
FBuilder (2008-01-16 13:53:00) [48]Запрос я уже оптимизировал - все что мог - сделал - там пару джоинов есть - но индексы по ним уже стоят.
меня инетесует как теперь подменить так, чтобы я сначала эти данные получал в прогу, а потом мгновенно выводил в табилцу...
Kolan (2008-01-16 13:49:00) [49]> Заказы в такси.
А запрос у тя какой? может там какой нить бешеный запрос, а ты делаешь SELECT * FROM <table>.
Для оперативного мониторинга можно ограничить набор полей(2-3). На что пользователь смотрит листая грид?
FBuilder (2008-01-16 13:46:00) [50].refresh
.execsql
по разному пробовал - результат почти одинаковый
Заказы в такси.
Kolan (2008-01-16 13:43:00) [51]Контрукция у меня такая:
А как ты обновляешь?
Почему так часто меняются, что там?
FBuilder (2008-01-16 13:38:00) [52]> Потом хорошо бы не раз в три секунды, а тогда, когда данные действительно обновились…
Думал - варианто проверить когда они обновились практически нет (реальных)
FBuilder (2008-01-16 13:37:00) [53]250 мсек
>Тогда может при обновлении поступать так — сначала затягивать все данные а пользователь путь пока видит старые, как только все получено обновлять ?
можно так поступить:
Но ка кэто сделать на локальном DBGrid
Контрукция у меня такая:
DBGrid <- DataSource <- DataSet <- connection
вставить промежуточну таблицу?
Kolan (2008-01-16 13:35:00) [54]Потом хорошо бы не раз в три секунды, а тогда, когда данные действительно обновились
Kolan (2008-01-16 13:34:00) [55]> Не вариант клиент просит еще чаще :(
Чтоже это кто-то вводит данные раз в 3 секунды?
Мгновенно ессно не получится никогда.
Есть несколько предложений.
1. «все занмиает около 250» секунд?
Тогда может при обновлении поступать так сначала затягивать все данные а пользователь путь пока видит старые, как только все получено обновлять ?
FBuilder (2008-01-16 13:28:00) [56]Не вариант - клиент просит еще чаще :(
Kolan (2008-01-16 13:25:00) [57]> проблема: табилца обновляется по такймеру ра зв 3 секунды.
Обновлять реже?