Форум: "Базы";
Текущий архив: 2010.03.14;
Скачать: [xml.tar.bz2];
ВнизКак макс быстро выгрузить данные из БД в память? Найти похожие ветки
← →
vlk32 (2009-03-03 13:27) [0]Данные это двумерная таблица значений плоскостности полосы. В базе хранится так:
Таблица Coil
rulon_id - ключ + данные по рулону
Таблица Scan
scan_id - ключ
rulon_id - ссылка на рулон + данные по скану
Таблица Measures
measure_id - ключ
scan_id - ссылка на скан
zone_id - порядковый номер зоны изм (0..99) + данные по точке измерения
Скрипт кот. выбирает все измерения для рулона, а также добавляет поле scan_num - порядковый номер скана в рулоне:select dense_rank() over (order by Scan_id) as scan_num,zone_id,tempr,flat2030,flatfact,flatdest
from Measures where scan_id in
(select Scan.scan_id from Scan,Coil where Coil.rulon_id=Scan.rulon_id and Coil.rulon_id=<номер рулона>)
order by scan_num, zone_id
Надо теперь данные загнать в динамический массив типа
array of array of Real;
1й способ кот. был опробован:
- выполнить скрипт через TADOQuery
- для каждого скана от 1 до N делать
DB_Meas.Filter := Format("scan_num=%d",[i+1]);
DB_Meas.First;
for j:=0 to 99 do
begin
ScanStat[id_temp].Y[j] := DB_Meas.FieldValues["tempr" ];
ScanStat[id_2030].Y[j] := DB_Meas.FieldValues["flat2030"];
ScanStat[id_fact].Y[j] := DB_Meas.FieldValues["flatfact"];
ScanStat[id_dest].Y[j] := DB_Meas.FieldValues["flatdest"];
DB_Meas.Next;
end;
2й способ
- выполнить скрипт через TADOQuery
for i:=0 to High(Coil.Scans) do
begin
for j:=0 to 99 do
Coil.Scans[i].ScanStat[id_temp].Y[j] := DB_Meas.FieldValues["tempr" ];
Coil.Scans[i].ScanStat[id_2030].Y[j] := DB_Meas.FieldValues["flat2030"];
Coil.Scans[i].ScanStat[id_fact].Y[j] := DB_Meas.FieldValues["flatfact"];
Coil.Scans[i].ScanStat[id_dest].Y[j] := DB_Meas.FieldValues["flatdest"];
DB_Meas.Next;
end;
1й способ грузит рулон 17 сек, 2й способ - 34 сек.
Мне казалось что 2й должен работать быстрее. В чем засада? И как сделать загрузку еще быстрее?
← →
Ega23 © (2009-03-03 13:29) [1]http://delphimaster.net/view/3-1235739432/
← →
Sergey13 © (2009-03-03 13:39) [2]> [0] vlk32 (03.03.09 13:27)
> Надо теперь данные загнать в динамический массив
А зачем?
← →
Anatoly Podgoretsky © (2009-03-03 13:49) [3]> vlk32 (03.03.2009 13:27:00) [0]
Так быстрее и работает, для случая N > 1
100
и
100 * (High(Coil.Scans)+1)
← →
vlk32 (2009-03-03 13:56) [4]>Sergey13 © (03.03.09 13:39) [2]
>> [0] vlk32 (03.03.09 13:27)
>> Надо теперь данные загнать в динамический массив
>А зачем?
А затем что надо потом рисовать изограмму плоскостности и всяко-разно эти данными манипулировать (примерно как работают с изображением всякими фильтрами).
Хотел еще сказать что блокирование датасета и отображения на экран тут не актуальны. Есть TADOQuery и надо тупо все выбросить в оперативку по быстрому. Мож как то настроить тип курсора, размер кэша или еще что.
Есть идеи или нет?
← →
Ega23 © (2009-03-03 14:10) [5]
> Есть идеи или нет?
Ссылку прочитал? Попробовал?
← →
Сергей М. © (2009-03-03 14:14) [6]
> надо тупо все выбросить в оперативку
В "оперативку" не получится - у тебя нет к ней доступа.
← →
Sergey13 © (2009-03-03 14:14) [7]> [4] vlk32 (03.03.09 13:56)
> блокирование датасета
Что это?
> Есть TADOQuery и надо тупо все выбросить в оперативку по быстрому
Так результат TADOQuery уже в ней, если все записи зафетчены.
← →
vlk32 (2009-03-03 14:23) [8]> Ссылку прочитал? Попробовал?
ну нет у меня никаких датасетов и визуальных компонент тоже нет связанных с БД. есть адоконнекшн + адоквери. все. ничо больше нет.
← →
Сергей М. © (2009-03-03 14:31) [9]
> ну нет у меня никаких датасетов
> есть .. адоквери
Да будет тебе открыта страшная тайна : TADOQuery есть непрямой потомок TDataSet и потому обладает всеми "правами и обязанностями" TDataSet.
← →
Ega23 © (2009-03-03 14:38) [10]
> ну нет у меня никаких датасетов и визуальных компонент тоже
> нет связанных с БД. есть адоконнекшн + адоквери. все. ничо
> больше нет.TADOQuery = class (TCustomADODataSet = class (TDataSet))
← →
vlk32 (2009-03-03 14:55) [11]DB_Meas.DisableControls;
Таки да. Но хучь убейте меня не могу понять каки-таки контролсы там были отключены. Голая же квери.ни к чему не привязана.
зы. тему можно закрыть
← →
Petr V. Abramov © (2009-03-03 14:58) [12]я б прям на сервере в BLOB загнал бы
← →
Ega23 © (2009-03-03 15:02) [13]
> Но хучь убейте меня не могу понять каки-таки контролсы там
> были отключены.
Смотри ADODB.pas -> TCustomADODataSet. Думай.
← →
vlk32 (2009-03-03 15:03) [14]> я б прям на сервере в BLOB загнал бы
дык проектировали "чтоб красиво и правильно" А красиво и правильно именно так как в первом посте описано. Хотя нам вьюшки делали так там данные все запыжованы в одну запись с полями типа FLAT_1 FLAT_2 итд
← →
vlk32 (2009-03-03 15:05) [15]
> Смотри ADODB.pas -> TCustomADODataSet. Думай.
Спасибо за совет. Проблема решена. На будущее учту энтот момент. Щаз другой работы полно. Так что копание в чужом коде отложу до лучших времен.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2010.03.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c