Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Объем данных - 4,5 млн записей: не хватает вирт.памяти [D6, IB5.x]


Страницы:   1 2

RUYurik ©   (2004-01-15 07:59:00) 

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


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


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


Desdechado   (2004-01-15 15:25:00) [2]

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


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

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


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

2 Desdechado

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


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

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


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

2 Danilka

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

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


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


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


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


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

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


RUYurik   (2004-01-15 11:01:00) [9]


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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

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


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


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

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


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


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


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


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

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


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

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


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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо