Конференция "Базы" » Сохранение больших объемов данных в файл [D7, PostgreSQL]
 
  • 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 мин.
  • Ega23 © (27.08.09 11:56) [1]
    сохраняй напрямую, это полюбому бастрее будет
    http://www.postgresql.org/docs/8.4/static/sql-copy.html
  • Ega23 © (27.08.09 11:58) [2]
    Если же так необходимо 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

    О_О, именно это я и искал :)
    Попробую, а то было хотел уже разбивать запрос на несколько тредов, потом собирать данные с тредов в кучу
  • Ega23 © (27.08.09 12:05) [4]

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


    Я тебе бы вообще порекомендовал взять и весь этот хелп прочитать. Там с вдумчивым чтением и пробой некоторых особенностей языка - дня на 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' тоже не существует :)
    Полюбому, даже если с правами на запись в локаль разберусь, первый пункт мне не побороть.
  • Ega23 © (27.08.09 13:08) [9]
    Создай временную таблицу, в неё селект из исходной, из временной - copy
  • Vitalts (27.08.09 13:29) [10]

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


    С той базы мне только селектить можно, никаких copy и тем более insertoв.
    Можно конечно создать на локальном серве временную и туда селектить с исходной, но к чему такие грабли, ежели можно вытаскивать данные напрямую.
  • Ega23 © (27.08.09 14:05) [11]
    Тогда [2]
 
Конференция "Базы" » Сохранение больших объемов данных в файл [D7, PostgreSQL]
Есть новые Нет новых   [134473   +32][b:0][p:0.001]