Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.12;
Скачать: 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 вся ветка

Текущий архив: 2003.05.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
4-34660
[lamer]Barmaglot
2003-03-11 13:29
2003.05.12
GetOpenFileName


14-34551
Yanis
2003-04-22 16:37
2003.05.12
Печать как на


1-34443
ДЮША
2003-04-28 15:02
2003.05.12
Программа в трее......


3-34334
Ergoist
2003-04-22 02:59
2003.05.12
DBGrid и расположение данных


1-34408
zloy_dima
2003-04-30 11:53
2003.05.12
Динамический массив