Форум: "Базы";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
ВнизКак сделать мгновенно? Найти похожие ветки
← →
FBuilder (2008-01-16 13:11) [0]Есть база данных удаленное на по локальной сетке.
Есть таблица (SQL запрос), которая отображает ее состояние.
табилца отображается пользователю - он ее видит, может по ней пробежаться.
записей порядка 100.
проблема: табилца обновляется по такймеру - ра зв 3 секунды.
сейчас получается что это все занмиает около 250 при апдейте :( У пользователя соответственно гладкого перемещения по таблице - нет - при обновлении все замирает и скрол - дергается.
Вопрос: как добиться более гладкого хождения пользователя по обновляемой таблице?
Mysql 4.0.x, DBExpress, dbx4mysql.dll
?
← →
Kolan © (2008-01-16 13:25) [1]> проблема: табилца обновляется по такймеру — ра зв 3 секунды.
Обновлять реже?
← →
FBuilder (2008-01-16 13:28) [2]Не вариант - клиент просит еще чаще :(
← →
Kolan © (2008-01-16 13:34) [3]> Не вариант — клиент просит еще чаще :(
Чтоже это кто-то вводит данные раз в 3 секунды?
Мгновенно ессно не получится никогда.
Есть несколько предложений.
1. «все занмиает около 250» секунд?
Тогда может при обновлении поступать так — сначала затягивать все данные а пользователь путь пока видит старые, как только все получено обновлять ?
← →
Kolan © (2008-01-16 13:35) [4]Потом хорошо бы не раз в три секунды, а тогда, когда данные действительно обновились…
← →
FBuilder (2008-01-16 13:37) [5]250 мсек
>Тогда может при обновлении поступать так — сначала затягивать все данные а пользователь путь пока видит старые, как только все получено обновлять ?
можно так поступить:
Но ка кэто сделать на локальном DBGrid
Контрукция у меня такая:
DBGrid <- DataSource <- DataSet <- connection
вставить промежуточну таблицу?
← →
FBuilder (2008-01-16 13:38) [6]> Потом хорошо бы не раз в три секунды, а тогда, когда данные действительно обновились…
Думал - варианто проверить когда они обновились практически нет (реальных)
← →
Kolan © (2008-01-16 13:43) [7]Контрукция у меня такая:
А как ты обновляешь?
Почему так часто меняются, что там?
← →
FBuilder (2008-01-16 13:46) [8].refresh
.execsql
по разному пробовал - результат почти одинаковый
Заказы в такси.
← →
Kolan © (2008-01-16 13:49) [9]> Заказы в такси.
А запрос у тя какой? может там какой нить бешеный запрос, а ты делаешь SELECT * FROM <table>.
Для оперативного мониторинга можно ограничить набор полей(2-3). На что пользователь смотрит листая грид?
← →
FBuilder (2008-01-16 13:53) [10]Запрос я уже оптимизировал - все что мог - сделал - там пару джоинов есть - но индексы по ним уже стоят.
меня инетесует как теперь подменить так, чтобы я сначала эти данные получал в прогу, а потом мгновенно выводил в табилцу...
← →
Kolan © (2008-01-16 14:00) [11]> там пару джоинов есть
Имхо тут основная проблемма. Может тебе завесли таблицу для мониторинга. В неё данные будут из осн. таблиц добавлять триггеры.
А запрос будет брать уже из этой таблицы. Будет быстрее.
> меня инетесует как теперь подменить так, чтобы я сначала
> эти данные получал в прогу, а потом мгновенно выводил в
> табилцу…
Можно пропробовать, в кач. эксперимента пока нет других идей/людей.
Подключать надор динамически.
То есть два дата сета с одним работает пользователь, второй по таймеру открываешь и меняешь DataSet у DataSource.
Надо будет еще и запомнить где курсор у пользователя был и назад выставить…
Тут скорее всего будет мигание неприятное…
← →
FBuilder (2008-01-16 14:04) [12]Спасибо!
вот сейчас что-то подобное и пытаюсь сделать...
только что-то с этой сменй дата сета пока трабла небольшая...
ну а locate - да - немного протормаживает - но не так сильно как все остальное :)
← →
Skyle © (2008-01-16 14:04) [13]Использовать DisableControls/EnableControls и клиентский курсор.
← →
Kolan © (2008-01-16 14:05) [14]> только что-то с этой сменй дата сета пока трабла небольшая…
А как я трабла поменял и се…
← →
FBuilder (2008-01-16 14:41) [15]>Использовать DisableControls/EnableControls и клиентский курсор.
Пробовал. Клиентский курсор - нет - это как на DBExpress рабоать точно будет?
← →
Skyle © (2008-01-16 14:52) [16]
> FBuilder (16.01.08 14:41) [15]
> >Использовать DisableControls/EnableControls и клиентский
> курсор.
>
> Пробовал. Клиентский курсор - нет - это как на DBExpress
> рабоать точно будет?
А я не пользовался ни разу этими компонентами, не знаю какая у них логика.
Смысл был таков
1. DisableControls/EnableControls отключают отрисовку при обновлении данных, что заведомо ускоряет процесс.
2. Использование клиентского курсора нужно понимать как "фетчить все записи на клиента и там уже показывать".
Если в этом случае всё тормозит, то проблема не в клиенте. Это либо запрос, либо подтормаживает сервер, либо сеть. Соответственно можно будет попробовать изменить подход к запросу.
Я например не смогу даже в течение минуты вникать в 100 записей, обновляющихся раз в 3 секунды, чесслово.
← →
Kolan © (2008-01-16 14:55) [17]> 1. DisableControls/EnableControls отключают отрисовку при
> обновлении данных, что заведомо ускоряет процесс.
Все равно будет затык у пользователя, имхо надо запрос оптимизоровать… Или UI менять…
← →
Kolan © (2008-01-16 14:56) [18]Афтар объясни что должен видеть пользователь?
← →
Sergey13 © (2008-01-16 15:09) [19]> [0] FBuilder (16.01.08 13:11)
Проверяй наличие обновлений в другом запросе. И только при их наличии обновляй показываемый.
← →
FBuilder (2008-01-16 15:30) [20]> Sergey13 ©
Нереально - поиск обновлений будет грузить мускул на время гораздо большее чем нужно (даже с другого компа).
> Kolan ©
Текущий список заявок в такси компании.
← →
FBuilder (2008-01-16 15:40) [21]Как-то можно обновлять TSimpleDataSet в паралелльном потоке, а потом применять в табилце все в главном?
← →
Правильный_Вася (2008-01-16 15:41) [22]
> Текущий список заявок в такси компании.
не нуждается в обновлении каждые 3 сек
> Нереально - поиск обновлений будет грузить мускул на время
> гораздо большее чем нужно
глупости
если будешь сохранять дату-время последней записи, то обновления - это более свежие записи, а их много быть не может
считал их, переложил в показываемый датасет, запомнил новую дату-время
> делал - там пару джоинов есть - но индексы по ним уже стоят
план запроса надо смотреть, а не индексы лепить
← →
Kolan © (2008-01-16 15:46) [23]> Текущий список заявок в такси компании.
да понял я, что конкретно, аддрес, дата, имя водителя, средняя температура двигателя , что именно?
← →
Sergey13 © (2008-01-16 15:54) [24]> [20] FBuilder (16.01.08 15:30)
> Нереально - поиск обновлений будет грузить мускул на время
> гораздо большее чем нужно (даже с другого компа).
Почему это?
select * from ... where ...
и например
select sum(id) from ... where ...
будут по разному нагружать твой мускул? Второй может и пошустрее даже работать.
← →
FBuilder (2008-01-16 15:56) [25]2Правильный_Вася
> Текущий список заявок в такси компании.
не нуждается в обновлении каждые 3 сек
Директору ты расскажешь?
> глупости
> если будешь сохранять дату-время последней записи, то обновления - это > более свежие записи, а их много быть не может
> считал их, переложил в показываемый датасет, запомнил новую дату-время
Супер - перелопатить всю прогу так как изменений в эту таблицу может вноситься в более чем 20 мест и везде еще и это проверять + контролировать синхронизацию времени на клиентах.
> план запроса надо смотреть, а не индексы лепить
Еще раз проблема:
ЕСТЬ длительный запрос к таблице - нужно чтобы УИ не тормозило при обновлении информации, а не лечить как этот запрос исправить
← →
FBuilder (2008-01-16 15:58) [26]2 Sergey13
В таблице около 40 полей (из которых читается часть) и несколько мемо, содержание которых внутри тоже может поменяться незначительно, но это есть изменение.
как мне такое контролировать и с чем сравнивать - держать табилцу паралелльную - тяжело :(
← →
Sergey13 © (2008-01-16 16:02) [27]> [26] FBuilder (16.01.08 15:58)
При каждом апдейте таблицы писать какую нибудь контрольную сумму или например дату-время в служебное поле, сумма которого по запросу и покажет наличие измений.
ЗЫ: А тригеров в твоей мускулатуре нет еще?
← →
Kolan © (2008-01-16 16:04) [28]Мое имхо оперативной инфы должно быть не много. И загружать её будет быстро. А если юзер захочет детально просмотреь вызов какой нить, то тогда все и загружай…
← →
FBuilder (2008-01-16 16:05) [29]2Sergey13
Пробелма - изменений туда может поступать из слишком разных и не только зависящих от меня источников - поэтому добавление подообной вещи - нет.
Тригеров нет, но в данном вопросе задача не уменьшить количество обновлений а сделать сам процесс обновления безобидней для польозвателя.
если это его будет выводить не каждую секунду, а каждые 10 секунд -разница небольшая :(
← →
FBuilder (2008-01-16 16:07) [30]2Kolan
оперативно инфы обычно колонок 20, строчек 100. Просмотре дополнительно - оно понятно. Но вот эти стточки все равно на локалке при текущем железе дают 200 мс отклика у мускула.
хочется этот отклик спрятать от юзвера просто и он будет счастлив!
← →
Sergey13 © (2008-01-16 16:14) [31]> [29] FBuilder (16.01.08 16:05)
> Пробелма - изменений туда может поступать из слишком разных
> и не только зависящих от меня источников
Не обижайся, но кажется ты лукавишь. Какие там еще источники? Парк автомобилей меняется на ходу что ли? Что-то не очень вяжется с заказами такси.
> задача не уменьшить количество обновлений а сделать сам
> процесс обновления безобидней для польозвателя.
Если свести задачу к только ОПРАДАННОМУ обновлению, то о безобидности может не надо будет беспокоиться?
← →
FBuilder (2008-01-16 16:21) [32]> Не обижайся, но кажется ты лукавишь. Какие там еще источники? Парк автомобилей меняется на ходу что ли? Что-то не очень вяжется с заказами такси.
Интернет заказы, СМС заказы.
Данные от водителей, которые поступают через звонок на миниАТС и отдельная программа находит этого водителя в списке текущих заказов и меняем ему статус в соответствии с тем, на какой номер позвонил водитель.
Много, поверь (это перечислено только то, что в этом такси, а есть еще и другие клиенты).
> Если свести задачу к только ОПРАДАННОМУ обновлению, то о безобидности может не надо будет беспокоиться?
Думал, прикидывал
Вкратце, если посчитать, то там выходит и так обновление раз в 3 секунды 50% вероятность что принесет новые данные при этом потоке заказов.
Поясни мне простую весчь: делаю отдельный TSimpleDataSet
в него в паралелльном потоке отдельным коннекшеном никого не трогая гружу данные - все ок.
Как мне эти данные потом быстренько отобразить или перекинуть их в ото SimpleDataSet из которого Grid смотрит (уже день за этим - немного туплю...)
← →
Правильный_Вася (2008-01-16 16:22) [33]
> Директору ты расскажешь?
директору эти записи как на заборе - сто лет снились
> перелопатить всю прогу так как изменений в эту таблицу может
> вноситься в более чем 20 мест
чтобы рыбку съесть, надо в воду лезть
зачем ты однои тоже делаешь в разных местах разными способами?
> контролировать синхронизацию времени на клиентах.
причем тут клиенты - время на сервере БД одно на всех
← →
Kolan © (2008-01-16 16:23) [34]> оперативно инфы обычно колонок 20
Ого, не верю. имхо 2-3 достаточно, ну 5 … но не 20. Отсюда ноги растут… Выкладывай что за поля…
← →
Kolan © (2008-01-16 16:31) [35]Человек в принципе не может следить за 20 парам параметрами в 100 строках, которые обновляются каждые 3 сек или чаще…
← →
FBuilder (2008-01-16 16:34) [36]2Kolan
Их ему нужно видеть в таблице:
чтобы не перечислять: удрас подачи (улица, дом, квартира, подезд, примечание).
телеофн, име клиента, нал безнал, номер каротчки или скидки.
время создания, время выдачи, время подезда водителя, предварительное вермя, время с клиентами,
статус.
это основные + есть дополнительные ка километражы, простои и т.д.
запрос я оптимзировал - вопросов нет.
как мне оператично ланные в DBGrid из паралелльного потока забрасывать?
← →
Kolan © (2008-01-16 16:45) [37]> номер каротчки или скидки, нал безнал
Очень нужная оперативная инфа. Без номера карточки никак :)
Проанализируй как они используют инфу. Но на вскидку:
Адрес, Имя клиента, Телефон, Статус(я так понял это типа не приехал еще/отвозит…), время подезда водителя
Все, остальное в открывать в отдельном окне, по желанию пользователя.
Кроме того твои 20 полей на монитор как помещаются? Неужели бедняги скролят еще и в бок 0_o?
← →
FBuilder (2008-01-16 16:48) [38]Помещаються впритык :(
Вопросы ка кперебрасывать данные полученные уже внтури приложения но из другого потока?
← →
Kolan © (2008-01-16 16:52) [39]> Помещаються впритык :(
Шо и адрес с именем полностью видны? Или у них Apple cinema 30" моники?
> Вопросы ка кперебрасывать данные полученные уже внтури приложения
> но из другого потока?
Как этот вопрос связан с сабжем?
← →
FBuilder (2008-01-16 17:02) [40]>Шо и адрес с именем полностью видны? Или у них Apple cinema 30" моники?
Нет, но широкоформатные.
>Как этот вопрос связан с сабжем?
Так, что удинственный путь, который я вижу - это параделльный поток, который получает всю табилцу, теряет невидимо для пользователя эти 250 мсек, но зато он их потерял - все - их нужно забросить в табилцу только - отобразить уже в основном потоке.
Основной поток должен не к базе стучаться - а к внутреннему dataset в котором эти данные уже есть. Но я что-то уже запутался как мне их из одного дата сета получит ьв другой :(
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.047 c