![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сбросить данные из таблицы в файл. [D6, FB 1.5]
S@shka © (2006-05-17 18:31:00)Народ есть вот какая задача.
1. Данные из большой таблицы сбросить в файл.
2. Файл перенести.
3. Окрыть и вставить эти данные в другую таблицу.
Делаю это через TIBClientDataSet (пока что):
open;
savetofile ();
- все получается но в процессе выполнения запроса select(данных много) приложение расходует много оп. памяти до 100 мб.
соответственно тормоза!
Второй вариант сделать тоже самое через IBSQL.BatchOutput - тут все здорово - данные методично отправляются в файл (память расходуется разумно) но я при обработке данных на приемнике несколько меняю запрос insert ((
Т.к. на второй стороне я открываю IBClientDataset и "шагаю" по ней мне было удобно чтобы на этапе select IBClientDataset тоже бы сбрасывал данные методично сразу в файл.
Можно ли этого как то добиться?
Или мож я вообще не тем путем иду?
Petr V. Abramov (2006-05-19 01:26:00) [1]если таблица большая, лучше использовать внешние таблицы FB. И быстро, и программирования меньше
S@shka (2006-05-18 23:50:00) [2]А вот странно - я все таки решил
делать через
IBSQL.BatchInput(F:TIBInputRawFile)
только вот не пойму
открываю я транзакцию
стартую процесс
после окончания закрываю транзакцию
а если много данных вливается до 1.000.000 записей
там ведь (в исходнике реализации BatchInput) - нет периодического подтверждения транзакции?
Это нормлаьно?
Sergey13 (2006-05-18 09:04:00) [3]2S@shka © (17.05.06 18:31)
Можно попробовать через внешнюю таблицу перегнать.
atruhin (2006-05-17 19:47:00) [4]Очень удобная библиотека для быстрого квотирования, замены управляющих символов, парсинга есть на сайте Alex Konshin модуль называется StringConv лет 5 пользуюсь.
atruhin (2006-05-17 19:44:00) [5]Так и пиши в текстовый файл как NULL, строки квотированные, если одна строка - одна запись, не забыть заменить #13#10, я делал подобное для экспорта, работает нежалуюсь :)
S@shka (2006-05-17 19:39:00) [6]
> Ну так используй Query а вывод в файл формируй сам как нужно,
> это несколько строк кода.
> При вставке построчно читаешь файл и обновляешь базу, будет
> медленней зато без расхода памяти.
Как в этом случае интерпретировать NULL значения?
atruhin (2006-05-17 19:34:00) [7]
> [1] Desdechado © (17.05.06 18:36)
Вообще я бы при выгрузке формировал не набор опраторов insert, а запрос на вставку, и список параметров, так как при выполнении скрипта (т.е. в операторе insert константы) запрос будет каждый раз компилироваться и вычисляться план, что может быть гораздо медленнее, в разы.
atruhin (2006-05-17 19:29:00) [8]Ну так используй Query а вывод в файл формируй сам как нужно, это несколько строк кода.
При вставке построчно читаешь файл и обновляешь базу, будет медленней зато без расхода памяти.
S@shka (2006-05-17 18:56:00) [9])))
Отвечаю на первый вопрос -
это делается редко.
Но надо большим массивом данных
Desdechado (2006-05-17 18:55:00) [10]ты не ответил на первый вопрос
а скрипт можнос конструировать уже так, чтоб не нужно было "на приемнике несколько меняю запрос insert"
тогда и грузить в CDS смысла не будет
S@shka (2006-05-17 18:39:00) [11]Под скриптом имеется ввиду?
Сделать select и данные сохранить в ввиде текстового файла
insert ... into ... values ... ;
commit;
???
Так это тож самое что BatchOutPut сделать ?
Desdechado (2006-05-17 18:36:00) [12]тебе это регулярно делать или разово?
проще выгрузить в скрипт, а потом скриптогонялкой выполнить его на другой базе