![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
rxMemoryDataSet [D5, IB6.x]
SasaR © (2004-01-20 19:00:00)
Здравствуйте :))
Формирую сложный, дурацкий, с переменным количеством столбцов отчёт. Данных в нём выходит очень много ~30 тыс. строк.
Фетчу из базы и заполняю сабж. В одном из вопросов прозвучал ответ, что, мол, сабж на больших объемах тормозит. Скорее всего так оно и есть. Вопрос - есть ли альтернатива сабжу и если да, то какая ?
Term (2004-01-21 15:47:00) [1]
> Нужно - как в хеплпе :))
естественно, а для чего же еще тогда хелпы пишут, не шутки же ради :)))
SasaR (2004-01-21 15:38:00) [2]
Поборол ...
Кому интересно - строка типа
ClientDataSet.FieldDefs.Add(F.Name,ftInteger,0,false) не нужна - из-за неё росла память!!!
Нужно - как в хеплпе :))
SasaR (2004-01-21 15:14:00) [3]
gобочный эффект....
Апликуха использует 400Mb оперативной (памяти) даже при использовании TClientDataSet.LogChanges:=false....
при rxMemoryDataSet было 20Mb...
Как побороть ?
SasaR (2004-01-21 13:55:00) [4]
Ох Вы и прицепились к клише "кропотливого анализа". На самом деле с помощью вышеупомянутых "кнопочек" в таком здоровенном наборе данных легко найти что-то и сделать соотв. выводы.
Исх. данные - ~ 1 млн. строк из которых в ходе группировки и всяких извратов получ 30 тыс.
Запрос к такой таблице, даже с минимальными условиями долог...
Поэтому и локальный грид. Но раз пользователь уже в гриде и посидел 15 мин и получил такой набор - пусть фильтрует, сортирует, экспортирует в Excel, dbf(если строк > 65535).
Если бы не вы, с вашими ответами, сидел бы он сутки :))
Прогресс - налицо, спасибо Нам всем :)
SasaR (2004-01-21 13:44:00) [5]
To Dred2k - Спасибо !!!
Таки да !!! Вместо 17 мин - 20 сек !!!
To Sergey13 - слава богу не я буду анализировать. Насчет анализа на сервере я "долго" думал :)
Просто отчёт вида:
(клиент 1 на дату 1) (клиент 1 на дату 2) и т.д.
строка 1
строка 2
...
строка N
Сколько клиентов - неизвестно и дат этих клиентов - тоже.
Задаются вначале пользователем.
Я не знаю заранее количество столбцов. Ib серверу я такое не передам, да и не сможет он вернуть из сторед прц такой набор данных.
Вот и получаю я столбцы отдельно и накапливаю теперь уже в TClientDataSet :))
Может можно изящней и оптимальнее ??? А ?
Desdechado (2004-01-21 12:00:00) [6]
это я говорил о тормозах rxMemoryDataset
там же я говорил о том, что нет необходимости перекачивать из обычного датасета в другой только для того, чтобы сделать экспорт или показать в гриде.
Зачам эти манипуляции? Что они дают?
Term (2004-01-21 11:47:00) [7]
> для кропотливого анализа и исследования
если ты или юзер, все 30000 строк кропотливо анализируеш!!!
то нафига ваще СУБД, программа и программист!!!
делайте всё руками на счётах костяшки перебрасывая, кропотливей чем так не получиться... или я чтото не понимаю, особенно фразу взятую в качестве цитаты
Dred2k (2004-01-21 11:42:00) [8]
> Danilka © (21.01.04 10:35) [5]
> На самом деле, альтернатива в другом. %))
И в датасете тоже, хотя сама необходиомость такого экстремального "анализа" мне, мягко говоря, непонятна.
Что-то тут с постановкой не то...
VAleksey (2004-01-21 11:26:00) [9]
Ты грид - то отключи нафиг на время обработки данных.
Danilka (2004-01-21 10:38:00) [10]
Наверняка, по-сторонам грида навешаны всякие кнопочки с фильтрами по-полям грида, суммами, сортировками и т.д. И "кропотливый анализ" на самом деле и есть - использование этих кнопочек. :))
И все что нужно - использовать эти кнопочки до того, как забираешь данные, а не после того. :))
Danilka (2004-01-21 10:35:00) [11]
[4] Dred2k © (21.01.04 09:40)
На самом деле, альтернатива в другом. %))
В том, что никакой анализ 30 тысяч строк в гриде невозможен. Тем более "кропотливый".
Перед тем как забирать записи с сервера, надо уточнить у юзера: что конкретно ему нужно, и забрать только это.
Чем меньше записей - тем более эффективна работа юзера - это аксиома, работающая даже с мегаюзерами. :))
Dred2k (2004-01-21 09:40:00) [12]
> SasaR (20.01.04 19:00)
Альтернатива очевидна - TClientDataSet, обязательно с отключенной историей изменений (LogChanges := False).
Я сам ранее пользовал сабж, но после некоторых экспериментов убедился в оптимальности TClientDataSet - и по скорости, и по возможностям.
Sergey13 (2004-01-21 09:19:00) [13]
2SasaR (20.01.04 19:15) [2]
>Нет, все 30 тыс. строк в Quantium-гриде, для кропотливого анализа и исследования.
Вручную исследуешь? Т.е. визуально? И как? До конца когда нибудь доходил? 8-)
Может тебе стоит подумать над реализацией анализа на сервере в ХП и выдаче на клиента только результатов этого анализа?
SasaR (2004-01-20 19:15:00) [14]
Нет, все 30 тыс. строк в Quantium-гриде, для кропотливого анализа и исследования. К тому-же там - практически мгновенный (но глюкавый в строке сумм) экпорт в Эксель для тех же целей.
Хоть плачь - почти 17 мин происходит myGrid.DataSource:= rxMemoryDataset;myGrid.OptionsDB = ...+[edgoLoadAllRecord];
Может это и грид тормозит, а может и сабж...
От грида избавится или убрать "+[edgoLoadAllRecord]" не хочется - уж больно хорош он в плане фильтров и сортировки..
А вот может замена сабжа на альтернативу может ускорит это всё....
Семен Сорокин (2004-01-20 19:06:00) [15]
Формирую сложный, дурацкий, с переменным количеством столбцов отчёт. Данных в нём выходит очень много ~30 тыс. строк.
все 30 тыс. строк на печать? ужас...