![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение больших объемов данных в файл [D7, PostgreSQL]
Vitalts © (2009-08-27 11:48:00)Есть проблема, со скоростью записи больших объемов данных.
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 14:05:00) [1]Тогда [2]
Vitalts (2009-08-27 13:29:00) [2]
> Создай временную таблицу, в неё селект из исходной, из временной
> - copy
С той базы мне только селектить можно, никаких copy и тем более insertoв.
Можно конечно создать на локальном серве временную и туда селектить с исходной, но к чему такие грабли, ежели можно вытаскивать данные напрямую.
Ega23 (2009-08-27 13:08:00) [3]Создай временную таблицу, в неё селект из исходной, из временной - copy
Vitalts (2009-08-27 13:00:00) [4]
> Пиши в файл c:/test1.txt
Дык 'c:/test.txt' тоже не существует :)
Полюбому, даже если с правами на запись в локаль разберусь, первый пункт мне не побороть.
Медвежонок Пятачок (2009-08-27 12:47:00) [5]Нет прав на запись в файл 'c:/test.txt'
Пиши в файл c:/test1.txt
Vitalts (2009-08-27 12:20:00) [6]Появилась новая загвоздка
Нет прав на [b]copy[/b] таблицы (и не даст мне их никто)
Нет прав на запись в файл 'c:/test.txt'
Vitalts (2009-08-27 12:09:00) [7]читаю Дж. Уорсли, Дж. Дрейк "PostgreSQL для профессианалов", но задачи идут быстрее моего чтения :(
Ega23 (2009-08-27 12:05:00) [8]
> О_О, именно это я и искал :)
Я тебе бы вообще порекомендовал взять и весь этот хелп прочитать. Там с вдумчивым чтением и пробой некоторых особенностей языка - дня на 2-3.
Зато потом будешь иметь хотя бы представления о возможностях + примерно где искать.
Vitalts (2009-08-27 12:03:00) [9]
> сохраняй напрямую, это полюбому бастрее будет
> http://www.postgresql.org/docs/8.4/static/sql-copy.html
О_О, именно это я и искал :)
Попробую, а то было хотел уже разбивать запрос на несколько тредов, потом собирать данные с тредов в кучу
Ega23 (2009-08-27 11:58:00) [10]Если же так необходимо TDataSet использовать, то я бы такой шаблон посоветовал:
with DataSet do
begin
DisableControls;
try
First;
while not Eof do
begom
// Тут сохраняем очередной рекорд в файл
Next;
end;
finally
EnableControls;
end;
end;
Ega23 (2009-08-27 11:56:00) [11]сохраняй напрямую, это полюбому бастрее будет
http://www.postgresql.org/docs/8.4/static/sql-copy.html