Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1261953438
Делфиец
2009-12-28 01:37
2010.03.14
Хочу давно "О чем не пишут в книгах по Delphi" почитать


2-1262704561
Sunktor
2010-01-05 18:16
2010.03.14
MinWidth по количеству кнопок в CoolBar.Bands


2-1263309374
Евгений Р.
2010-01-12 18:16
2010.03.14
Работа с tAdoQuery


15-1261724996
Медвежонок Пятачок
2009-12-25 10:09
2010.03.14
скромность и умеренность по христиански.


2-1263155363
trxnet
2010-01-10 23:29
2010.03.14
Отправка данных через сокет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский