Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизПерекачка большого кол-ва записей в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c