Форум: "Базы";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизПодскажите с какой стороны взяться... Найти похожие ветки
← →
Alexus (2003-10-21 19:14) [0]Подскажите пожалуйста с какой стороны начать, так как программирую недолго и нем могу выбрать средства для реализации.
Нужно на основе сформированного набора данных( ADODataSet ) построить таблицу агрегатов для выбранных полей. Подскажите что для этого нужно использовать ?
← →
MsGuns (2003-10-21 20:14) [1]TClientDataSet ?
← →
Alexsus (2003-10-21 20:15) [2]Не понял вопроса.
← →
MsGuns (2003-10-21 20:17) [3]Я не понял ? Если надо агрегаты (суммы по колонкам в пределах групп или по всему НД, то CDS - это как раз то, что надо, если что-то другое, то надо яснее формулировать.
← →
Alexsus (2003-10-21 20:23) [4]В общем нужно организовать механизм группировки и аггрегирования, но функции агрегатов могут быть не стандартными(не только сумма, среднее и тд ). На основе каких компонентов это можно реализовать ? И нет ли какого-нить примерчика ?
← →
Кщд (2003-10-22 07:44) [5]так необходимые ф-ции в студию
или считаете, что сейчас все Вам бросятся советовать, не имея представления о том, что Вам нужно?
← →
Alexus (2003-10-22 14:25) [6]Нужно реализовать как минимум димперсию и среднеквадратическое.
← →
Кщд (2003-10-22 14:35) [7]такого компонента не знаю
дисперсию и прочее из мат. статистики можно считать добавив в uses Math
← →
Alexsus (2003-10-22 14:54) [8]А как хотя бы это можно реализовать? Вычисление самой дисперсии это не проблема, вопрос как это организовать на основе данных полученных из базы с минимальными затратами и желательно большим быстродействием ? Очень помог бы хоть какой-нибудь совет.
← →
Brahman (2003-10-22 16:25) [9]Если данные уже получены, то уже не проблема.
Если IB - то можно UDF
← →
Alexsus (2003-10-23 14:11) [10]Данные уже получены. А вот что такое IB и UDF к сожалению не понял.
← →
Zacho (2003-10-23 14:20) [11]
> Alexsus (23.10.03 14:11) [10]
> А вот что такое IB и UDF к сожалению
> не понял.
IB - это такой SQL-сервер. А UDF - это User Defined Function. Но все равно тебе это не нужно, т.к. в любом случае сделать агрегатную ф-цию в UDF не получиться.
← →
kaif (2003-10-23 14:33) [12]Делаешь базу на InterBase (Firebird).
Это сервер баз данных. Прикольная вещь. Попробуй - не пожалеешь.
Создаешь там таблицу (CREATE TABLE MYTABLE ...).
Ложишь туда данные (закачиваешь)
Потом делаешь один простой SELECT типа
SELECT SUM((A-A0)*(A-A0)) D, COUNT(*) C
FROM MYTABLE
Потом открываешь этот запрос и получаешь дисперсию:
dispercy := FieldByName("D").AsFloat/FieldByName("C").AsInteger.
← →
Alexsus (2003-10-23 14:50) [13]Дело в том что база лежит в ACCESS и это требование заказчика, и нужно не только дисперсию, а по возможность какой нибудь механизм на основе которого можно было бы легко добавлять новые аггрегаты. Если я буду формировать группировки и т.д. сам на основе кого TADOTable это будет достаточно эффективно по скорости или нужно использовать что нить другое ???
← →
kaif (2003-10-23 15:02) [14]Но ведь Access поддерживает SQL-запросы.
ИМХО, нужно создать механизм динамического формирования текстов SQL-запросов и получать исходные данные для разных агрегатов. Хорошо бы добавить в программу небольшой скриптер-нитерпретатор, чтобы производить окончательную обработку данных. И главное - придумать удобный интерфейс, в котором можно было бы задавать (или добавлять) новые формулы для статобработки.
Для получения той же дисперсии тебе нужно выполнить 2 задачи:
1. Максимально быстро получить суммарный квадрат отклонения и кол-во записей.
2. Поделить одно на другое.
Задача 1 решается SQL-запросом к Access-базе
Задача 2 решается встроенным интерпретатором формул. Интерпретаторы можно найти в сети. Например, Automa Pascal Scripter и многие другие.
← →
Alexsus (2003-10-23 15:13) [15]Возможно я чего не допонимаю.
Предварительная выборка SQL запросом не будет сожержать не сгрупированный набор данных т.к. иначе упрёмся в стандартне аггрегаты. Следовательно группировка и аггрегация должна производиться уже не посредственно в памяти или где-нить во временной таблице(что не желательно) и вопрос в том что я просто не знаю какой инструментарий предоставить хорошее быстродействие в этом случае.
← →
kaif (2003-10-23 17:15) [16]Просто я не вижу статистических задач, в которых стандартные агрегаты не подошли бы в качестве исходного "материала".
Есть еще одна идея. 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 18:23) [17]Спасибо за совет. Только я не понял что подразумевается под "очень быстрый скриптёр" ?
← →
Vick (2003-10-23 18:53) [18]>Предварительная выборка SQL запросом не будет сожержать не >сгрупированный набор данных т.к. иначе упрёмся в стандартне >аггрегаты. Следовательно группировка и аггрегация должна >производиться уже не посредственно в памяти или где-нить во временной таблице
Не понимаю, почему SQL запрос не может делать группировки и аггрегатизации, при этом все запихивать во временную таблицу, потом ее просто убивать - по-моему очень даже нормально. Только фигня, что Access не поддерживает хранимые процедуры.
← →
Alexsus (2003-10-23 18:59) [19]SQL запрос может делать группировки и агрегации, просто нужно использовать не стандартные агрегаты, поэтому SQL можно использовать только на этапе подготовки данных, по моему так.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.036 c