Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.16;
Скачать: CL | DM;

Вниз

Сохранение больших объемов данных в файл   Найти похожие ветки 

 
Vitalts   (2009-08-27 11:48) [0]

Есть проблема, со скоростью записи больших объемов данных.
Zeos справляеться с этой задачей на ура. Даже шустрее самого pgAdmina, но вот незадача, он наотрез отказываеться выдавать результаты на сложные запросы.
Пробовал юзать PostgesDAC, отлично понимает сложные запросы, данные с базы вытаскивает с терпимой скоростью, но вот как доходит дело до сбора данных для записи в файл, труба.
Приведенный код для ZEOS сохраняет данные в txt объемом в 20 Мб отрабатывет за менее чем 30 сек, он же, но с PostgresDACом не справляеться за [b]час[/b].
while ZQuery1.FindNext do
begin
   currrecord:= "";
   for i:= 0 to fieldscount - 2 do
     currrecord:= currrecord + ZQuery1.Fields.Fields[i].AsString + Edit9.Text;
   currrecord:= currrecord + ZQuery1.Fields.Fields[fieldscount-1].AsString;
   txt.SaveNext(currrecord);
end;

Что можете посоветовать? Как ускорить процесс? Уменьшить хотябы скорость отработки кода с текстовыми данными в 50МБ до 15 мин.


 
Ega23 ©   (2009-08-27 11:56) [1]

сохраняй напрямую, это полюбому бастрее будет
http://www.postgresql.org/docs/8.4/static/sql-copy.html


 
Ega23 ©   (2009-08-27 11:58) [2]

Если же так необходимо TDataSet использовать, то я бы такой шаблон посоветовал:

with DataSet do
begin
 DisableControls;
 try
   First;
   while not Eof do
   begom
     // Тут сохраняем очередной рекорд в файл
     Next;
   end;
 finally
   EnableControls;
 end;
end;


 
Vitalts   (2009-08-27 12:03) [3]


> сохраняй напрямую, это полюбому бастрее будет
> http://www.postgresql.org/docs/8.4/static/sql-copy.html

О_О, именно это я и искал :)
Попробую, а то было хотел уже разбивать запрос на несколько тредов, потом собирать данные с тредов в кучу


 
Ega23 ©   (2009-08-27 12:05) [4]


> О_О, именно это я и искал :)


Я тебе бы вообще порекомендовал взять и весь этот хелп прочитать. Там с вдумчивым чтением и пробой некоторых особенностей языка - дня на 2-3.
Зато потом будешь иметь хотя бы представления о возможностях + примерно где искать.


 
Vitalts   (2009-08-27 12:09) [5]

читаю Дж. Уорсли, Дж. Дрейк "PostgreSQL для профессианалов", но задачи идут быстрее моего чтения :(


 
Vitalts   (2009-08-27 12:20) [6]

Появилась новая загвоздка
Нет прав на [b]copy[/b] таблицы (и не даст мне их никто)
Нет прав на запись в файл "c:/test.txt"


 
Медвежонок Пятачок ©   (2009-08-27 12:47) [7]

Нет прав на запись в файл "c:/test.txt"

Пиши в файл   c:/test1.txt


 
Vitalts   (2009-08-27 13:00) [8]


> Пиши в файл   c:/test1.txt

Дык "c:/test.txt" тоже не существует :)
Полюбому, даже если с правами на запись в локаль разберусь, первый пункт мне не побороть.


 
Ega23 ©   (2009-08-27 13:08) [9]

Создай временную таблицу, в неё селект из исходной, из временной - copy


 
Vitalts   (2009-08-27 13:29) [10]


> Создай временную таблицу, в неё селект из исходной, из временной
> - copy


С той базы мне только селектить можно, никаких copy и тем более insertoв.
Можно конечно создать на локальном серве временную и туда селектить с исходной, но к чему такие грабли, ежели можно вытаскивать данные напрямую.


 
Ega23 ©   (2009-08-27 14:05) [11]

Тогда [2]



Страницы: 1 вся ветка

Текущий архив: 2011.01.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
15-1285532959
Юрий
2010-09-27 00:29
2011.01.16
С днем рождения ! 27 сентября 2010 понедельник


2-1287986449
Irisss
2010-10-25 10:00
2011.01.16
Компилятор игнорирует Breakpoint


2-1287557759
LDV
2010-10-20 10:55
2011.01.16
Связать алгоритм с классами


15-1285988423
boriskb
2010-10-02 07:00
2011.01.16
Best jobs in America


2-1288094860
fiascko
2010-10-26 16:07
2011.01.16
перевод из 16ой в 10ую