Форум: "Базы";
Текущий архив: 2011.01.16;
Скачать: [xml.tar.bz2];
ВнизСохранение больших объемов данных в файл Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c