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

Вниз

Объем данных - 4,5 млн записей: не хватает вирт.памяти   Найти похожие ветки 

 
RUYurik   (2004-01-15 07:59) [0]

Всем приятного времени суток!
У меня вопрос: использую IBExtract для выгрузки данных. Только в одной таблице - 4,5млн. записей, а я таких 6 таблиц объединяю.
При Extr2.ExtractObject(eoTable,"PEOPLE",[etData]) ругается "Не хватает виртуальной памяти". Как быть, или что использовать для выгрузки этих данных в подготовленном виде, типа "Insert into..." и чтобы памяти много не ело?


 
Flagman   (2004-01-15 08:05) [1]

Попробуй IBExpert, я им пользуюсь. Правда с таким объемом данных не пробовал, но может потянет. А в принципе, можно просто самому построитель запроса написать - там же строчка типовая...


 
RUYurik   (2004-01-15 08:10) [2]

Я в программе использую это, не хотелось бы пользоваться IBExprt"ом.


 
jack128   (2004-01-15 08:19) [3]

А ручками никак? Имхо не так их и сложно..


 
Flagman   (2004-01-15 08:25) [4]

Насколько я понимаю, нужно сгенерить текстовый запрос типа:

INSERT INTO TBL1(N1, N2,...) VALUES (V11, V21,...);
INSERT INTO TBL1(N1, N2,...) VALUES (V12, V22,...);
INSERT INTO TBL1(N1, N2,...) VALUES (V13, V23,...);
...
...
INSERT INTO TBL1(N1, N2,...) VALUES (V10003, V20003,...);
...
COMMIT;

Т.к. Vх везде и всюду тебе известно, можно генерить просто текстовый файл. Причем коммит должен стоять через разумные количества строк (напр. через 500). Потом вызвать его в IBQuery (или FIBQuery) и выполнить.
Кроме того можно саму генерацию делать после каждого коммита для новой порции данных - тогда вообще можно будет не оглядываться какие у тебя объемы данных...

За точность синтаксиса не ручаюсь, ежели что проверить можно в том же IBExpert"е ... ;)


 
jack128   (2004-01-15 08:42) [5]

Проблема в том ibextract все твои 4.5 миллиона записей stringlist загоняет. Точнее пытается загнать :-) Решение
> jack128 © (15.01.04 08:19) [3]


 
Flagman   (2004-01-15 08:59) [6]

2 jack128:
Я и говорю - разумно было бы их порезать на небольшие куски и кидать по очереди...


 
RUYurik   (2004-01-15 09:26) [7]


> jack128 © (15.01.04 08:42) [5]

Именно так и есть, он все загоняет в StringList, а как можно порезать на куски например по 10000 записей? В IBExtract по моему нет такого. А насчет ручками, если так не получится, то конечно пойду более длинным путем - буду ручками генерить sql-текст


 
jack128   (2004-01-15 09:41) [8]


> RUYurik © (15.01.04 09:26) [7]
Я только сейчас обратил внимание на этот компонент, я им не пользовался, поэтому не знаю насчет его возможностей..
А порезать можно так
копируешь код TIbExtract.ListData, только вместо FMetaData.Add(Line) - пишешь WriteLn(ScriptFile, Line);


 
RUYurik   (2004-01-15 09:56) [9]


> jack128 © (15.01.04 09:41) [8]

Там свойства ListData нет, есть Items (сам стринглист)


 
Flagman   (2004-01-15 10:18) [10]

Если я все правильно понял в хелпе по IBExtract, то логичнее сделать так:

вместо Extr2.ExtractObject(eoTable,"PEOPLE",[etData])
нужно написать хранимую процедурку, которая будет делать выборку из PEOPLE по двум параметрам: от ID1 до ID2 (по ключевому полю)
разница между ID1 и ID2 - количество строк какое нужно, и писать уже так:
Extr2.ExtractObject(eoProcedure ,"FROM_PEOPLE",[etData])


 
Flagman   (2004-01-15 10:20) [11]

И крутить в цикле:
Создал процедуру;
Сделал экспорт;
Убил процедуру;
И так пока записи не кончатся...


 
RUYurik   (2004-01-15 10:36) [12]

Нет, это не выход для меня. Я не хочу трогать структуру базы


 
Flagman   (2004-01-15 10:40) [13]

А чем это чревато? Фактически ты ничего и не потрогаешь ;)
Процедуры надо за собой убирать после работы да и все...


 
Danilka   (2004-01-15 10:41) [14]

а в чем проблема?
самому процедуру дельфовую написать быстрее, чем живет эта тема. :))
и объем кода на порядок меньше, чем весит эта ветка. :))


 
Desdechado   (2004-01-15 10:44) [15]

что значит "6 таблиц объединяю" - сливаешь в одну?
тогда
insert into tbl select * from tbl1
insert into tbl select * from tbl2
и т.д.


 
RUYurik   (2004-01-15 11:01) [16]


> Danilka © (15.01.04 10:41) [14]

Вы не посмотрели наверное - в одной таблице только 4,5 млн. записей


> Desdechado © (15.01.04 10:44) [15]

они в разных базах находятся


> Flagman © (15.01.04 10:40) [13]

Скорей всего иак и сделаю, тут как раз удобство еще и в том что на стороне сервера все енто будет крутиться


 
Flagman   (2004-01-15 11:04) [17]

2 RUYurik
Я уже года 2 вообще все расчеты на SP делаю, а на клиента только отображение результатов скидываю, да ввод параметров ;))


 
Danilka   (2004-01-15 11:08) [18]


> [16] RUYurik © (15.01.04 11:01)
> Вы не посмотрели наверное - в одной таблице только 4,5 млн.
> записей


И что? Хоть три записи, хоть тридцать три мильёна. Размер процедуры от этого не зависит. :))


 
RUYurik   (2004-01-15 11:23) [19]

2 Danilka

> И что? Хоть три записи, хоть тридцать три мильёна. Размер
> процедуры от этого не зависит. :))

В смысле хранимую? Да, об этом и говорит FlagMan


 
Desdechado   (2004-01-15 11:28) [20]

если в разных базах, то как ты собрался ХП делать?
а БДЕ поддерживает в одном запросе обращение к нескольким БД


 
Flagman   (2004-01-15 11:31) [21]

2 Desdechado

Какая нафиг разница сколько баз.
Процедура делает только select из источника.
Остальное сделает IBExtract.


 
Карелин Артем   (2004-01-15 12:34) [22]

Использовать двунаправленные наборы данных для выборки из IB надо.


 
Desdechado   (2004-01-15 15:25) [23]

2 Flagman © (15.01.04 11:31) [21]
Тогда это не одна хранимая процедура, а столько их, сколько баз. Следовательно, разница есть.


 
jack128   (2004-01-15 17:51) [24]


> Там свойства ListData нет, есть Items (сам стринглист)
ListData - это не свойство, это protected method. Исходники надо чаще почитывать ;-)



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

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

Наверх





Память: 0.5 MB
Время: 0.034 c
1-16285
MakNik
2004-01-26 09:27
2004.02.06
Всплывающие подсказки как у Windows Messenger-а


9-16028
greenrul
2003-07-21 23:06
2004.02.06
Волновой алгоритм поиска пути -


4-16837
Bombus
2003-12-01 17:32
2004.02.06
Как из Mouse Hook а узнать, что перетаскивается: окно или файлы


3-16141
Александр Бакулин
2004-01-15 08:51
2004.02.06
Программное создание хранимой процедуры


3-16113
Volodya_
2004-01-16 01:29
2004.02.06
DBGrid





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