Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Быстрая выгрузка данных в файлы  [new]
Valergrad
Member

Откуда:
Сообщений: 703
Версия Оракла - 9.2.0.8
Есть огромная БД.
Необходимо выгрузить определенные данные из нее в файлы формата *.dbf.
Единственное, что пока в голову приходит - написать свои процедуры используя utl_file.
Есть подозрение, что это будет медленно.
Пока не начал работу, может кто предложит что-нибудь еще?
Главный критерий - скорость выгрузки.
10 авг 10, 18:10    [9242784]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
Valergrad
Главный критерий - скорость выгрузки.


А данных сколько (хотя бы порядок)? STFF экспорт dbf, оттуда и ниже - решения и обсуждение.

PS: Сам рисовал на основе пакета Кайта, мне скорости хватало... Правда, и данных не очень много.
10 авг 10, 18:33    [9242915]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
вопросец
Guest
spool

не dbf, но будет быстро очень. можно, например, будет разбить на промежутки where и отдать по запросу на сессию. итого получите параллельно (если i/o позволяет) N csv-файлов. а потом зальете хоть куда их.
10 авг 10, 18:46    [9242975]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
Вадиман
Member

Откуда: Владивосток
Сообщений: 1072
вопросец
spool

не dbf, но будет быстро очень. можно, например, будет разбить на промежутки where и отдать по запросу на сессию. итого получите параллельно (если i/o позволяет) N csv-файлов. а потом зальете хоть куда их.

И почему это будет быстрей?
Каждый кусок лежит на своем диске?
11 авг 10, 05:53    [9243976]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
Valergrad
Member

Откуда:
Сообщений: 703
Размер пока точно неизвестен, но явно >3 тб
11 авг 10, 07:54    [9244027]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
Valergrad
Размер пока точно неизвестен, но явно >3 тб
Ты уже учел ограничение на размер файла dbf?
11 авг 10, 08:02    [9244042]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8130
Valergrad
Размер пока точно неизвестен, но явно >3 тб
И есть что-то, что сумеет обработать такой объем данных в формате DBF???
Интересно, что это такое? Супер-клиппер? Супер-фокс? Супер-Эксель? Супер-...?

P.S. А в формате DBF объем данных скорее всего будет намного больше 3Тб, хранимых в Oracle...
11 авг 10, 08:05    [9244044]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
Valergrad
Member

Откуда:
Сообщений: 703
Ну, будет не один конечно файл .dbf, а много.
И осуществляться будет не за один раз, а по частям.
Но все равно быстродействие важно.
Кто-нибудь экспериментировал - не быстрее ли будет использовать Java или С?
Тут в комментах
пишут, что у utl_file производительность ни к черту.
11 авг 10, 09:13    [9244236]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
SQLap
Member [заблокирован]

Откуда:
Сообщений: 34063
Valergrad,

если грузить в CSV - нормальная у UTL_FILE производительность.
В dbf оттуда не пробовал.

Если бы делал в DBF - то на Delphi в стыке с Halcyon Dataset.
Будет ли Java или С быстрее? А хрен его знает. Может и будет.
11 авг 10, 09:24    [9244279]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
-2-
Member

Откуда:
Сообщений: 15330
Valergrad
что у utl_file производительность ни к черту.
Производительность программы складывается (в контексте "производительность" правильнее говорить "делится") из ее компонентов, скорость которых, в свою очередь, может зависеть от внешних факторов. Скорость записи в файл, обычно, настолько мала, что неоптимальность программного интерфейса играет ничтожную роль. Но может играть роль понимание, как более эффективно пользоваться этим API.
Проведите тесты в вашем конкретном окружении. Приведите результаты и текст скриптов, сообщество оценит правдоподобие и возможные пути оптимизации.
11 авг 10, 09:28    [9244299]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
Valergrad
Member

Откуда:
Сообщений: 703
-2-
Скорость записи в файл, обычно, настолько мала, что неоптимальность программного интерфейса играет ничтожную роль.


Если скорость работы программы будет ограничена именно физической скоростью записи в файл - меня это вполне устроит, более чем.

-2-
Проведите тесты в вашем конкретном окружении. Приведите результаты и текст скриптов, сообщество оценит правдоподобие и возможные пути оптимизации.


pl/sql

  for rec in 1..10000000 loop
        UTL_FILE.put_line(l_output, rec);      
     end loop;

Время работы - 2 мин 32 секунды

С
автор
freopen("C:\\temp\\2.txt","wt", stdout);


for(int i = 1; i <= 10000000; i++)
{
int j = i;
int k = 0;
while ( j > 0 ) { temp[k++] = j%10; j = j/10; }
for(int l = k - 1; l >= 0; l--)
a[ap++] = '0' + temp[l];
a[ap++] = '\0';
}
for(int i = 0; i < ap; i++) printf("%c",a[i]);


Время работы - 11 секунд

Может UTL_FILE и не тормознутый, расскажите тогда как его нормально использовать.
11 авг 10, 12:40    [9245970]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49728
Valergrad
Необходимо выгрузить определенные данные из нее в файлы формата *.dbf.

А что будет дальше с этими файлами? Будут снова грузиться в Oracle?
11 авг 10, 13:02    [9246122]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
-2-
Member

Откуда:
Сообщений: 15330
Valergrad,

Ваш тест оценить оказалось просто:
Error starting at line 1 in command:
for rec in 1..10000000 loop
Error report:
Unknown Command
Ожидалось что-то типа:
Запись на диск XXX rpm, во время теста его никто не использовал, тест повторялся N раз...
declare
  f utl_file.file_type;
  s  varchar2(32767);
  ss varchar2(20);
  nl varchar2(10) := '
';
  procedure wr is
  begin
     --NULL;
     utl_file.put_raw(f, utl_raw.cast_to_raw(s));
  end;
begin
  f := utl_file.fopen('ORACLE_TMP','test10000000.tst','wb');
  s := '';
  for rec in 1..10000000 loop
    ss := to_char(rec);
    if length(s) + length(ss) > 32767-10 then
       wr;
       s := '';
    end if;
    s := s||ss||nl;
  end loop;
  wr;
  utl_file.fclose(f);
end;
/
anonymous block completed
4 226ms elapsed --запись
-rw-r--r-- 1 oracle dba   78888897 2010-08-11 13:10 
3 942ms elapsed -- NULL
11 авг 10, 13:14    [9246242]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
Valergrad
Member

Откуда:
Сообщений: 703
mayton,

нет, в ms-sql. Причем принимающий интерфейс для ms/sql уже есть, он ожидает формат .dbf
11 авг 10, 13:26    [9246372]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
mayton
Member

Откуда: loopback
Сообщений: 49728
Valergrad, учитывая твои объёмы, (>3Тб) лучше почитать на тему всяких там Migration Assistents.
11 авг 10, 15:02    [9247223]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
Valergrad
Member

Откуда:
Сообщений: 703
Так здесь нет никакой миграции. Или бывает, что мигрируют с оракла на .dbf?
11 авг 10, 15:29    [9247495]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8130
Valergrad
mayton,
нет, в ms-sql. Причем принимающий интерфейс для ms/sql уже есть, он ожидает формат .dbf
Так может быть проще переделать тот принимающий интерфейс так, чтобы он ожидал Oracle Gateway или Heterogenous Services? Нет?
11 авг 10, 15:35    [9247558]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
Valergrad
Member

Откуда:
Сообщений: 703
SQL*Plus,

это худший вариант. в этих интерфейсах много бизнес-логики, тот кто их писал уже далече.
11 авг 10, 15:44    [9247628]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
Valergrad
Member

Откуда:
Сообщений: 703
-2-, в 9ке нет RAW_MODE для UTL_FILE
11 авг 10, 15:53    [9247712]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
Valergrad
Member

Откуда:
Сообщений: 703
-2-,

Проверил ваш код с буферизацией.
1 минута 55 секунд.
RPM не смотрел, но это и неважно, главное что в обоих тестах ( на С и pl/sql ) винт один и тот же, а скорость различается больше чем на порядок.
11 авг 10, 16:01    [9247771]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8130
Valergrad
SQL*Plus,
это худший вариант. в этих интерфейсах много бизнес-логики, тот кто их писал уже далече.
В интерфейсах разовой загрузки с преобразованием данных?
11 авг 10, 16:01    [9247774]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8130
Valergrad
главное что в обоих тестах ( на С и pl/sql ) винт один и тот же, а скорость различается больше чем на порядок.
Пока будете тестировать, да переписывать оно бы уж за пару выходных бы и выгрузилось.. :-)
11 авг 10, 16:04    [9247789]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
-2-
Member

Откуда:
Сообщений: 15330
Valergrad
-2-, в 9ке нет RAW_MODE для UTL_FILE
Меня больше интересовало реабилитировать utl_file 70МБ/(4226мсек-3942мсек)≈250МБ/сек. RAW использовал именно в свете записи DBF. Писать DBF как текст постремался бы.
11 авг 10, 16:04    [9247795]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
Valergrad
Member

Откуда:
Сообщений: 703
SQL*Plus,

почему разовой? эти интерфейсы постоянно используются для загрузки данных.
11 авг 10, 16:05    [9247801]     Ответить | Цитировать Сообщить модератору
 Re: Быстрая выгрузка данных в файлы  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8130
Valergrad
SQL*Plus,
почему разовой? эти интерфейсы постоянно используются для загрузки данных.
И каждый раз по 3 ТБ???
11 авг 10, 16:05    [9247803]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить