Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-1079924342
Думкин
2004-03-22 05:59
2004.04.18
С днем рождения! 22 марта.


4-1076672517
KA
2004-02-13 14:41
2004.04.18
Перехват и дальнейшая передача сообщений.


1-1080801799
ПрогерШ
2004-04-01 10:43
2004.04.18
Как в эдите сделать токо ввод английскеих букв?


4-1076686502
}{enon
2004-02-13 18:35
2004.04.18
Как заблокировать DC?


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский