Форум: "Базы";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];
ВнизКак ускорить выгрузку! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c