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

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

Замедление DataSet.next [D7, MySQL]


Страницы:   1 2 3 4

wsv ©   (2007-07-13 10:28:00) 

Здравствуйте.
Столкнулся с проблемой при больших DataSet-ах с доступом к MySql с помщью компонентов Zeos.
В DataSet (точнее ZQuery, который наследник DataSet), выбирается большое количество данных, 50 тысяч строк и более.
При считывании результата запроса циклом while...do begin ... Dataset.next... происходит замеделение считывания, которое визуально отловлено простым прогрессором.

КАК ИЗБАВИТЬСЯ?

Может можно как-то другими способами скопировать результат в массив?

В частном случае копируются данные типа duoble в масив соотв. типа... В общем случае это вариантные данные.


wsv   (2007-07-13 11:38:00) [41]


> отключения контролов нет,


> Контролов связанных с датасетами нет вообще.


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


Сергей М.   (2007-07-13 11:37:00) [42]


> rowcount:=dm.navdata.rowcount


Я не в курсе, что там творится в потрохах Zeos, но глубоко сомневаюсь, что RowCount вернет истинное число записей в выборке.


wsv   (2007-07-13 11:35:00) [43]


> fieldbyname вынеси за пределы цикла

Это как? :-)
можно сделать fieldvalues или fields.field[0]... но как "вынести за цикл"?


> RowCount поменяй на not eof

Делал. Тоже самое.


sniknik   (2007-07-13 11:30:00) [44]

ага,  ну вот [16], более менее
отключения контролов нет, RowCount поменяй на not eof, fieldbyname вынеси за пределы цикла, и StepBy делай не на каждую итерацию, а на видимую часть (видиш к примеру 100 квадратиков в прогрессе, рассчитай так чтобы было 100 StepBy)
изменилось чтонибудь?


wsv   (2007-07-13 11:30:00) [45]


> Откуда тогда взялось значение RowCount ?

Блин... :-D
dm.navdata.close;
dm.navdata.sql.text:='Select ... from ... where...';
dm.navdata.open;

rowcount:=dm.navdata.rowcount;

:-D


Сергей М.   (2007-07-13 11:27:00) [46]


> не все. за период, указанный юзером


Откуда тогда взялось значение RowCount ?


wsv   (2007-07-13 11:27:00) [47]

Контролов связанных с датасетами нет вообще.
Все в массивах.


sniknik   (2007-07-13 11:26:00) [48]

меня например очень интересует используешь ли ты отключение контролов, как идет доступ к полям, и не используешь ли ты чего нибудь что вычисляется на основе рекордсета (либо может вычисляться, смотря от того как сделаны Zeos-ы, (тут, от незнания, могу только предполагать, что это))


wsv   (2007-07-13 11:25:00) [49]

А можно как-то по другому?
Вот и спрашиваю, чо... :-D


wsv   (2007-07-13 11:24:00) [50]


> а именно как делаешь то что по твоему тормозит.


i:=0;
dm.navdata.First;
while i<RowCount do
begin
fuelout[i]:=dm.navdata.fieldbyname('....').Value;
dm.navdata.Next;
inc(i);
pb.StepBy(1);
end;


sniknik   (2007-07-13 11:21:00) [51]

> Исходная информация. D7-Zeos-MySql.
это не то ... интересуют "волшебные пузырьки" в коде их [0], а именно как делаешь то что по твоему тормозит.


wsv   (2007-07-13 11:18:00) [52]


> нафига каждый раз тащить  все даннные, а не только вновь
> поступившие..

не все. за период, указанный юзером.


wsv   (2007-07-13 11:17:00) [53]

Исходная информация. D7-Zeos-MySql.
Навиг. данные: очень частая пилА - топливный датчик, показания с которого нифига не интегрированы.
1. Получаем данные датчика за период.
2. Загоняем в массив.
3. Преобразуем вейвлетом.
4. Линеаризуем.
5. Приводим к тарировке датчика
6. Ищем сливы-заправки
7. Выводим график расхода по тарировке и вероятные сливы-заправки.

Проблема в п.2
Все остальное очень быстро робит.


Плохиш   (2007-07-13 11:16:00) [54]


> Дальше, только передача данных из запроса в массив занимает
> уже десятки секунд. Например на 100 тыс записей - это 18
> секунд передачи в массив.

Ну а что хотели, дай догадаюсь, постоянные перераспределения размеров массива. Производительность современных вычислительных систем в любом случае конечна, а вы тут такие объёмы данных по системе таскаете...


Сергей М.   (2007-07-13 11:12:00) [55]


> Вейвлет преобразование и фильтрация силами Мускула?


Почему бы и нет ?

Я не в курсе, но разве Мускул не предоставляет механизма использования внешних пользовательских функций, подобного механизму UDF в IB ?

А если и не предоставляет, то все равно непонятно, нафига каждый раз тащить   вседаннные, а не только вновь поступившие..


sniknik   (2007-07-13 11:11:00) [56]

> Как выйти из положения?
общеизвестный выход из положения - родить. ;о)
в твоем случае разродиться исходной информацией... (сам, я так понимаю, ошибку найти не в состоянии)


wsv   (2007-07-13 11:08:00) [57]


> Почему бы не обработать их на стороне сервера ?


Ога... Вейвлет преобразование и фильтрация силами Мускула? :-D


wsv   (2007-07-13 11:07:00) [58]


> "Принеси то, не знаю что?"

Период конечно известен. Это наше время. В общем случае - год-два-три...

> А причем тут отчет?

Отчет при том, что нужно сначала отловить обработкой заправки-сливы-остановки-стоянки, что уже сделано. На данных до 30 тыс. строк обработка (считывание+собственно поиск) занимает меньше секунды. Дальше, только передача данных из запроса в массив занимает уже десятки секунд. Например на 100 тыс записей - это 18 секунд передачи в массив.

Как выйти из положения?


Сергей М.   (2007-07-13 11:04:00) [59]


> Данные нужно обработать сначала


Почему бы не обработать их на стороне сервера ?


Desdechado   (2007-07-13 11:03:00) [60]

> Нужен отчет за период. Границы периода неизвестны.
"Принеси то, не знаю что?"

> Это навигационные данные, которые поступают каждые 15-30 секунд.
А причем тут отчет?


Страницы:   1 2 3 4

Наверх

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