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