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

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

Подскажите с какой стороны взяться... [D6]


Alexus ©   (2003-10-21 19:14:00) 

Подскажите пожалуйста с какой стороны начать, так как программирую недолго и нем могу выбрать средства для реализации.
Нужно на основе сформированного набора данных( ADODataSet ) построить таблицу агрегатов для выбранных полей. Подскажите что для этого нужно использовать ?


Alexsus   (2003-10-23 18:59:00) [1]

SQL запрос может делать группировки и агрегации, просто нужно использовать не стандартные агрегаты, поэтому SQL можно использовать только на этапе подготовки данных, по моему так.


Vick   (2003-10-23 18:53:00) [2]

>Предварительная выборка SQL запросом не будет сожержать не >сгрупированный набор данных т.к. иначе упрёмся в стандартне >аггрегаты. Следовательно группировка и аггрегация должна >производиться уже не посредственно в памяти или где-нить во временной таблице

Не понимаю, почему SQL запрос не может делать группировки и аггрегатизации, при этом все запихивать во временную таблицу, потом ее просто убивать - по-моему очень даже нормально. Только фигня, что Access не поддерживает хранимые процедуры.


Alexsus   (2003-10-23 18:23:00) [3]

Спасибо за совет. Только я не понял что подразумевается под "очень быстрый скриптёр" ?


kaif   (2003-10-23 17:15:00) [4]

Просто я не вижу статистических задач, в которых стандартные агрегаты не подошли бы в качестве исходного "материала".
Есть еще одна идея. Run-time генерация текстов хранимых процедур.
Разбиваешь всякую задачу опять на 2 задачи:
1. SQL-запрос, собирающий с помощью стандартных агрегатов "сырой материал"
2. Создаешь run-time хранимую процедуру, сканирующую результирующий набор, посталяемый этим запросом и делающая всю остальную работу. Делаешь SELECT-запрос результатов этой процедуры, после чего процедуру уничтожаешь.

Однако такое решение возможено тоько в IB.

Если Access - требование заказчика, то я вижу только такие решения:
1. (гибкое) Берется компонент kbmMemTable (очень быстрая таблица в памяти, поддерживающая индексацию и все остальные прелести для быстрой обработки данных), результат "сырого" SQL выбрасывается в эту таблицу с помощью какого-нибудь метода типа kbmMemTable.LoadFromDataSet, а дальше организуется окончательный расчет руками при помощи очень быстрого скриптера. Такие есть. я сам встречал скриптеры, развивающие до 100млн. операций в секунду (правда не помню, какие).
2. (жесткое) Методы расчетов добавляются к системе в виде отдельных подключаемых dll, загружаемых динамически, с единым стандартом вызова (правда разработать такой стандарт на все случаи жизни сложно). Или же вообще в виде ActiveX-ов добавляются, но опять dll-ы. Юзер добавлять новые не сможет в этом случае. DLL-ы будешь дописывать ты и поставлять заказчику по мере надобности.


Alexsus   (2003-10-23 15:13:00) [5]

Возможно я чего не допонимаю.
Предварительная выборка SQL запросом не будет сожержать не сгрупированный набор данных т.к. иначе упрёмся в стандартне аггрегаты. Следовательно группировка и аггрегация должна производиться уже не посредственно в памяти или где-нить во временной таблице(что не желательно) и вопрос в том что я просто не знаю какой инструментарий предоставить хорошее быстродействие в этом случае.


kaif   (2003-10-23 15:02:00) [6]

Но ведь Access поддерживает SQL-запросы.
ИМХО, нужно создать механизм динамического формирования текстов SQL-запросов и получать исходные данные для разных агрегатов. Хорошо бы добавить в программу небольшой скриптер-нитерпретатор, чтобы производить окончательную обработку данных. И главное - придумать удобный интерфейс, в котором можно было бы задавать (или добавлять) новые формулы для статобработки.
Для получения той же дисперсии тебе нужно выполнить 2 задачи:
1. Максимально быстро получить суммарный квадрат отклонения и кол-во записей.
2. Поделить одно на другое.

Задача 1 решается SQL-запросом к Access-базе
Задача 2 решается встроенным интерпретатором формул. Интерпретаторы можно найти в сети. Например, Automa Pascal Scripter и многие другие.


Alexsus   (2003-10-23 14:50:00) [7]

Дело в том что база лежит в ACCESS и это требование заказчика, и нужно не только дисперсию, а по возможность какой нибудь механизм на основе которого можно было бы легко добавлять новые аггрегаты. Если я буду формировать группировки и т.д. сам на основе кого TADOTable это будет достаточно эффективно по скорости или нужно использовать что нить другое ???


kaif   (2003-10-23 14:33:00) [8]

Делаешь базу на InterBase (Firebird).
Это сервер баз данных. Прикольная вещь. Попробуй - не пожалеешь.
Создаешь там таблицу (CREATE TABLE MYTABLE ...).
Ложишь туда данные (закачиваешь)
Потом делаешь один простой SELECT типа
SELECT SUM((A-A0)*(A-A0)) D, COUNT(*) C
FROM MYTABLE

Потом открываешь этот запрос и получаешь дисперсию:
dispercy := FieldByName("D").AsFloat/FieldByName("C").AsInteger.


Zacho   (2003-10-23 14:20:00) [9]


> Alexsus (23.10.03 14:11) [10]
> А вот что такое IB и UDF к сожалению
> не понял.

IB - это такой SQL-сервер. А UDF - это User Defined Function. Но все равно тебе это не нужно, т.к. в любом случае сделать агрегатную ф-цию в UDF не получиться.


Alexsus   (2003-10-23 14:11:00) [10]

Данные уже получены. А вот что такое IB и UDF к сожалению не понял.


Brahman   (2003-10-22 16:25:00) [11]

Если данные уже получены, то уже не проблема.
Если IB - то можно UDF


Alexsus   (2003-10-22 14:54:00) [12]

А как хотя бы это можно реализовать? Вычисление самой дисперсии это не проблема, вопрос как это организовать на основе данных полученных из базы с минимальными затратами и желательно большим быстродействием ? Очень помог бы хоть какой-нибудь совет.


Кщд   (2003-10-22 14:35:00) [13]

такого компонента не знаю
дисперсию и прочее из мат. статистики можно считать добавив в uses Math


Alexus   (2003-10-22 14:25:00) [14]

Нужно реализовать как минимум димперсию и среднеквадратическое.


Кщд   (2003-10-22 07:44:00) [15]

так необходимые ф-ции в студию
или считаете, что сейчас все Вам бросятся советовать, не имея представления о том, что Вам нужно?


Alexsus   (2003-10-21 20:23:00) [16]

В общем нужно организовать механизм группировки и аггрегирования, но функции агрегатов могут быть не стандартными(не только сумма, среднее и тд ). На основе каких компонентов это можно реализовать ? И нет ли какого-нить примерчика ?


MsGuns   (2003-10-21 20:17:00) [17]

Я не понял ? Если надо агрегаты (суммы по колонкам в пределах групп или по всему НД, то CDS - это как раз то, что надо, если что-то другое, то надо яснее формулировать.


Alexsus   (2003-10-21 20:15:00) [18]

Не понял вопроса.


MsGuns   (2003-10-21 20:14:00) [19]

TClientDataSet ?


Наверх

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