Вниз
Скачать: CL | DM;

Как ускорить выгрузку!   Найти похожие ветки 

 
off ©   (2003-04-21 14:04) [0]

Добрый день мастера, сейчас занимаюсь переводом таблиц Paradox на 3-й диалект, т.е. в InterBase. И все было ничего, пока не добрался до больших таблиц. Пока перегонял таблички по 20-40 тыс. записей все происходило в течение считаных минут, а вот с 980 тыс. записей перегнать оказалось гораздо сложнее, вернее сказать, дольше. Проблема же состоит в перекачке таблицы из 3 млн. записей. Тут комп виснет окончательно и после трех часов напряженной работы сообщает, что системе не хватает ресурсов и гасит мою прогу. Для перекачки использую TTable (исходная таблица) IBDataSet (собственно куда перегоняем). Вопрос же остается прежним, что может ускорить перекачку данных?


 
Соловьев ©   (2003-04-21 14:06) [1]


> Для перекачки использую TTable (исходная таблица)

а частями нельзя?


 
Zacho ©   (2003-04-21 14:09) [2]

В IBDataSet поставь UniDirectional:=true или используй TIBSQL


 
off ©   (2003-04-21 14:50) [3]

> Zacho ©
UniDirectional:=true поставил, CachedUpdate и ForcedRefresh тоже поставил true, на всякий случай. Пробовал перегонять через IBTable, но результаты примерно аналогичные.


 
Соловьев ©   (2003-04-21 14:52) [4]

пакетами почему не хочешь? перегнал 10 000 - коммит, и так далее.
очисть ресурсы.


 
off ©   (2003-04-21 14:53) [5]


> Соловьев ©


> а частями нельзя?

Можно и частями, только думаю начальство будет не в восторге, да и выгоды практически никакой кроме того, что прога виснуть не будет. Ну так это не главное.


 
Соловьев ©   (2003-04-21 14:54) [6]


> никакой кроме того, что прога виснуть не будет

я думаю это самое главное - убрать лучше глюк чем со свистом ганять воздух...


 
off ©   (2003-04-21 15:06) [7]

Может, я сейчас глупость спрошу и мне будет стыдно, но все же
> используй TIBSQL
, а как?


 
Mike Kouzmine ©   (2003-04-21 15:20) [8]

А DataPump не пробовал?


 
Zacho ©   (2003-04-21 16:14) [9]


> off © (21.04.03 15:06)

Например, так:
Пусть есть таблица MY_TABLE с полями ID,NAME.
Соответственно, есть TTable для этой таблице в парадоксе.
Берем TIBSQL. В св-ве SQL пишем INSERT INTO MY_TABLE (ID,NAME) VALUES (:ID,:NAME)
Потом:
Table.First;
while not Table.Eof do
begin
IBSQL.ParamByName("ID").Value:=Table.FieldByName("ID").Value;
IBSQL.ParamByName("NAME").Value:=Table.FieldByName("NAME").Value;
IBSQL.ExecQuery;
Table.Next;
end;
А CachedUpdates и Refresh тебе вообще не нужны


 
NickBat ©   (2003-04-21 17:15) [10]

Вариант предложенный Zacho © (21.04.03 16:14), на мой взгляд медленный.
Как-то у меня возникла задача перегнать данные из dBase в Firebird. Метод перебора оказался медленнее, причем гораздо, чем сброс данных во внешний файл со скриптом, а затем обработка этого скрипта IBExpert.
Однако объемы у меня были гораздо меньше 3 млн. записей.

Судя по всему работа разовая, и главное тут качество. Так что слушайся Соловьева.


 
Виталий Панасенко   (2003-04-21 17:19) [11]

Ресурсов тебе,кажись, не хватает из-за CashUpdate=True Ведь это что-то где-то в ОЗУ находится ...


 
off ©   (2003-04-22 08:26) [12]


> Zacho ©


> А CachedUpdates и Refresh тебе вообще не нужны

Я бы согласился, если бы не результаты тестирования перекачки таблицы из 40 тыс. записей следующие:

CachedUpdates:=true - 0:00:56
CachedUpdates:=false - 0:01:39

На мой взгляд преимущество очевидно.



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.01 c
7-34620
xtreme
2003-03-17 12:31
2003.05.12
Как определить сколько HDD в системе - IDE и сколько - SCSI ?


1-34465
Ghost_
2003-04-29 09:18
2003.05.12
Опять Ёксель и формулы


4-34653
JoSHUA
2003-03-12 15:28
2003.05.12
Убийство


8-34514
Makhanev A.S.
2003-02-01 20:42
2003.05.12
как сохранить MP3 тэг версии 2 ?


3-34377
supersan
2003-04-21 16:40
2003.05.12
Получение значения поля только что вставляемой записи




   Наверх