![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объем данных - 4,5 млн записей: не хватает вирт.памяти [D6, IB5.x]
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]