Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];

Вниз

Сбросить данные из таблицы в файл.   Найти похожие ветки 

 
S@shka ©   (2006-05-17 18:31) [0]

Народ есть вот какая задача.

1. Данные из большой таблицы сбросить в файл.
2. Файл перенести.
3. Окрыть и вставить эти данные в другую таблицу.

Делаю это через TIBClientDataSet (пока что):
open;
savetofile ();
- все получается но в процессе выполнения запроса select(данных много) приложение расходует много оп. памяти до 100 мб.
соответственно тормоза!

Второй вариант сделать тоже самое через IBSQL.BatchOutput - тут все здорово - данные методично отправляются в файл (память расходуется разумно) но я при обработке данных на приемнике несколько меняю запрос insert ((

Т.к. на второй стороне я  открываю IBClientDataset и "шагаю" по ней мне было удобно чтобы на этапе select IBClientDataset тоже бы сбрасывал данные методично сразу в файл.

Можно ли этого как то добиться?
Или мож я вообще не тем путем иду?


 
Desdechado ©   (2006-05-17 18:36) [1]

тебе это регулярно делать или разово?
проще выгрузить в скрипт, а потом скриптогонялкой выполнить его на другой базе


 
S@shka ©   (2006-05-17 18:39) [2]

Под скриптом имеется ввиду?
Сделать select и данные сохранить в ввиде текстового файла
insert ... into ... values ... ;
commit;

???

Так это тож самое что BatchOutPut сделать ?


 
Desdechado ©   (2006-05-17 18:55) [3]

ты не ответил на первый вопрос

а скрипт можнос конструировать уже так, чтоб не нужно было "на приемнике несколько меняю запрос insert"
тогда и грузить в CDS смысла не будет


 
S@shka ©   (2006-05-17 18:56) [4]

)))
Отвечаю на первый вопрос -
это делается редко.
Но надо большим массивом данных


 
atruhin ©   (2006-05-17 19:29) [5]

Ну так используй Query а вывод в файл формируй сам как нужно, это несколько строк кода.
При вставке построчно читаешь файл и обновляешь базу, будет медленней зато без расхода памяти.


 
atruhin ©   (2006-05-17 19:34) [6]


> [1] Desdechado ©   (17.05.06 18:36)

Вообще я бы при выгрузке формировал не набор опраторов insert, а запрос на вставку, и список параметров, так как при выполнении скрипта (т.е. в операторе insert константы) запрос будет каждый раз компилироваться и вычисляться план, что может быть гораздо медленнее, в разы.


 
S@shka ©   (2006-05-17 19:39) [7]


> Ну так используй Query а вывод в файл формируй сам как нужно,
>  это несколько строк кода.
> При вставке построчно читаешь файл и обновляешь базу, будет
> медленней зато без расхода памяти.

Как в этом случае интерпретировать NULL значения?


 
atruhin ©   (2006-05-17 19:44) [8]

Так и пиши в текстовый файл как NULL, строки квотированные, если одна строка - одна запись, не забыть заменить #13#10, я делал подобное для экспорта, работает нежалуюсь :)


 
atruhin ©   (2006-05-17 19:47) [9]

Очень удобная библиотека для быстрого квотирования, замены управляющих символов, парсинга есть на сайте Alex Konshin модуль называется StringConv лет 5 пользуюсь.


 
Sergey13 ©   (2006-05-18 09:04) [10]

2S@shka ©   (17.05.06 18:31)
Можно попробовать через внешнюю таблицу перегнать.


 
S@shka ©   (2006-05-18 23:50) [11]

А вот странно - я все таки решил
делать через
IBSQL.BatchInput(F:TIBInputRawFile)

только вот не пойму
открываю я транзакцию
стартую процесс
после окончания закрываю транзакцию

а если много  данных вливается до 1.000.000 записей
там ведь (в исходнике реализации BatchInput) - нет периодического подтверждения транзакции?

Это нормлаьно?


 
Petr V. Abramov ©   (2006-05-19 01:26) [12]

если таблица большая, лучше использовать внешние таблицы FB. И быстро, и программирования меньше



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.055 c
3-1147963296
novill
2006-05-18 18:41
2006.07.23
Append, Locate и Edit


2-1151951452
Ivolg
2006-07-03 22:30
2006.07.23
Handle


6-1142500622
Ifrit
2006-03-16 12:17
2006.07.23
Посылка сообщения (типа net send от другого имени..


5-1135664859
DimaBr
2005-12-27 09:27
2006.07.23
Похожие компоненты


1-1150026479
XiAndr
2006-06-11 15:47
2006.07.23
Блокировка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский