Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

Перекачка большого кол-ва записей в Ibase. Проблема нехватки   Найти похожие ветки 

 
dimm22   (2004-03-22 18:01) [0]

памяти. Нужно ночью из одной файл серверной БД, к ней подключаюсь через БДЕ, перекачивать в данные в IB. Таблиц много, около 60, в некоторых по 70-80 полей. Колличество записей в самой большой таблице 500 000. Так вот, подключаюсь я к этой БД и соответственно к Ibase, в приложении пишу  pFibDataSEtKlient.FieldByName("name").AsString:= QueryKlient.FieldByName("name").AsString;
Итд по колличеству полей пока  While not QueryKlient.Eof.
Транзакцию подтверждаю каждые 1000 вставленных записей.
В некоторых таблицах по 4-7 мемо полей (вот на таких то таблицах и имею геморой). В итоге оперативная память быстро заканчивается. Какие варианты решения могут быть?  Всё это безобразие нужно делать автоматически каждую ночь.


 
Johnmen ©   (2004-03-22 18:05) [1]

Чтобы вставить новые записи вовсе не обязательно получать НД на таблицу, в которую вставка. Даже вредно, ибо расход памяти... :)


 
dimm22   (2004-03-22 18:09) [2]

Что имеется ввиду под "НД". Чего то я не понял ответа :-)


 
Vlad ©   (2004-03-22 18:12) [3]


> dimm22   (22.03.04 18:09) [2]

НД - набор данных. DataSet другими словами.
А что мешает создать два алиаса в БДЕ и делать вставку данных с пом. гетерогенного запроса ? Не уверен, но мне кажется памяти будет кушаться гораздо меньше.


 
dimm22   (2004-03-22 18:17) [4]

>А что мешает создать два алиаса в БДЕ и делать вставку данных с пом. гетерогенного запроса ? Не уверен, но мне кажется памяти будет кушаться гораздо меньше.

Мешает отсутствие знаний, но это уже мои проблемы, почитаю.

А утечка памяти происходит, в моём приложении. Ну это и понятно, ибо такое кол-во данных в неё тащится.


 
Vlad ©   (2004-03-22 18:24) [5]


> dimm22   (22.03.04 18:17) [4]


> Мешает отсутствие знаний,

Ну, вкратце примерно так. В БДЕ создаешь два алиаса. Один алиас настраиваешь на базу IB, другой алиас -  на другой сервер с которого качать будешь. А гетерогенный запрос - это SQL запрос с участием этих двух алиасов, т.е. например так:
insert into :alias1.table1 select * from :alias2.Table2
Примерно так, точнее читай в справке по БДЕ.


 
Johnmen ©   (2004-03-22 18:29) [6]

>ибо такое кол-во данных в неё тащится.

Вот и смысл в том, чтобы в каждый момент времени не редактировать полученный набор данных ! А использовать его только для чтения. Вставлять же INSERT INTO ... с параметрами желательно. Да и коммититься через 300-500 вставок.


 
Domkrat ©   (2004-03-22 18:29) [7]

Переполнение памяти скорее из-за IB.
Ты же там сам ничего не создаешь в цикле.

Думаю слишком много Commit-ов. Попробуй 1-табала -1 коомит.


 
Domkrat ©   (2004-03-22 18:34) [8]

И не используй
>pFibDataSEtKlient.FieldByName("name").AsString:=   QueryKlient.FieldByName("name").AsString;
>INSERT INTO ... с параметрами желательно


 
dimm22   (2004-03-22 18:37) [9]

Спасибо за объяснение. Щас уже ваяю гетерогенный запрос. Потом попробую Insert Into. А результатах завтра сообщу.


 
Zacho ©   (2004-03-22 20:10) [10]


> Domkrat ©   (22.03.04 18:29) [7]
> Переполнение памяти скорее из-за IB

Чушь. Тоже самое было бы и любым другим сервером. Переполнение памяти только из-за того, что создается кэш набора данных на клиенте. Правильное решение - использовать нужные компоненты (и/или правильно использовать компоненты) . С FIBPlus не работаю, а для IBX или BDE сказал бы что делать.


 
Romkin ©   (2004-03-22 20:22) [11]

Можно просто создать текстовый файл, в котором insert into... и commit work через каждые 1000-10000 записей, в IB идет элементарно :) а так - через insert  самое то. Кстати, если в текстовом файле в начале написать CONNECT ... то писать вообще не придется - просто подать его isql, само все сделает


 
dimm22   (2004-03-23 10:29) [12]

>Zacho
>Чушь. Тоже самое было бы и любым другим сервером

Я думаю Domkrat имел в виду что виноват DataSet который к Ibase цепляется, а не сам сервер. Сам то сервер делал вставку абсолютно без напрягов, не занимая много ресурсов памяти (2-5 Mb ) и процессора(1-3 %). На самом деле так оно и есть, ибо переход на Query с параметрами дал нужный результат. В общем  осталось для интереса попробовать гетерогенный запрос. Ну и может предложение Romkin. Хотя сейчас и так всё прекрасно работает. За что всем огромный РЕСПЕКТ.



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

Текущий архив: 2004.04.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.038 c
14-1080327503
Knight
2004-03-26 21:58
2004.04.18
Комбайн... CD-RW+DVD...


14-1080299177
Романов Р.В.
2004-03-26 14:06
2004.04.18
Опрос - поиск файлов


1-1080713247
tivispider
2004-03-31 10:07
2004.04.18
Компиляция проекта в командной строке


7-1076695634
Maksss
2004-02-13 21:07
2004.04.18
Консоль в полно экранный режим


1-1080746502
Kosto
2004-03-31 19:21
2004.04.18
Как вызвать функцию в Делфи по ее адресу?