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

Вниз

Объем данных - 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.023 c
14-16685
Blender
2004-01-17 13:15
2004.02.06
Internet Explorer


7-16773
ps
2003-11-14 16:42
2004.02.06
Вопрос по девайсам установленным в системе


4-16793
Mohamed
2003-12-01 17:34
2004.02.06
Resource


14-16641
vidiv
2004-01-11 14:57
2004.02.06
DNS Server


14-16617
Думкин
2004-01-15 06:14
2004.02.06
С днем рождения! 15 января.