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

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

Как правильно закачивать в базу большие объемы данных?


Страницы:   1 2 3

Defunct ©   (2005-08-04 05:14:00) 

обычный insert into (..) жутко медленно работает ~1k записей в сек.. Транзакцию закрываю через каждые 5k записей. В качестве исходных данных - текстовые файлы, объемом всреднем по ~500mb, чувствую если заливаться данные в базу будут как сейчас, то уйдет несколько недель.. Подскажите пож. способы ускорения работы insert'a

БД - IB6.5/FB1.5


Desdechado   (2005-08-04 16:10:00) [21]

[24]
может, автор не хочет затачивать под конкретную СУБД


Desdechado   (2005-08-04 16:09:00) [22]

нагрузка клиента будет меньше
если он с сервером на одной машине, то серверу достанется больше ресурсов
вот такое вдохновление


Андрей Жук   (2005-08-04 16:08:00) [23]


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

Ага, в 4%
Использование IB API даст прирост в 1000%.

Оптимизацию тут нужно проводить совсем не в языковых средствах.


Fay   (2005-08-04 15:45:00) [24]

2 Digitman ©   (04.08.05 15:36) [22]
>> применение WITH даст неплохой результат прироста производительности сгенерированного кода
И он (код) вдохновит свои примером СУБД? Не уверен.


Digitman   (2005-08-04 15:36:00) [25]


> Fay ©   (04.08.05 15:05) [17]


шутку юмора понял, но по сабжу она вряд ли уместна.

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

см. [16]


Виталий Панасенко   (2005-08-04 15:25:00) [26]


> Виталий Панасенко   (04.08.05 12:15) [12]
> Примени CashedUpdates - будет быстрее

Я не повторяюсь...Я не повторяюсь-2...Я не повторяюсь-3...
Это раельно даказано


Fay   (2005-08-04 15:19:00) [27]

2 Андрей Жук ©   (04.08.05 15:12) [19]
Буквально. Я наблюдал только спад скорости.


Андрей Жук   (2005-08-04 15:12:00) [28]


> Пошутили.

?


Fay   (2005-08-04 15:08:00) [29]

2 Андрей Жук ©   (04.08.05 12:50) [15]
>> разработчики говорили
Пошутили.


Fay   (2005-08-04 15:05:00) [30]

2 Digitman ©   (04.08.05 10:59) [9]
>> компилятор в случае с WITH сгенерирует более эффективный код, нежели без WITH
В данном случае это не лимитирующий фактор. Валить лес лобзиком эффективнее.


Desdechado   (2005-08-04 13:34:00) [31]

ANB ©   (04.08.05 11:08) [10]
> Я думал - компилятору WITH по барабану, это чтобы короче писать
это позволяет использовать регистровую адресацию объектов, что немножко быстрее


Андрей Жук   (2005-08-04 12:50:00) [32]

Еще можно загрущать используя Embedded версию - разработчики говорили, что это очень сильно повышает скорость.


DiamondShark   (2005-08-04 12:44:00) [33]


> Самое высокое быстродействие дает утилита BCP (Bulc Copy
> Program).

Для Интербейз?


Ольга   (2005-08-04 12:16:00) [34]

Самое высокое быстродействие дает утилита BCP (Bulc Copy Program).


Виталий Панасенко   (2005-08-04 12:15:00) [35]

Примени CashedUpdates - будет быстрее


Андрей Жук   (2005-08-04 11:55:00) [36]

Вставка через IBQuery???
Ты че?
Если надо очень быструю вставку - то или API (там получишь > 10 тыc. записей в секунду), или IBSQL. Ни в коем случае не IBQuery.


ANB   (2005-08-04 11:08:00) [37]


> Digitman ©   (04.08.05 10:59) [9]

Пынятно. Я думал - компилятору по барабану, это чтобы короче писать примочка. А большой выигрыщ дает ?

И, это, нарывался я на трудноотлавливаемую ошибку при использовании with. Шло закрытие свойства формы, так вот писал он в один объект, а читал из другого. Я пока вычислил это - запарился.


Digitman   (2005-08-04 10:59:00) [38]


> ANB ©   (04.08.05 10:31) [8]


не всегда, но в ряде случаев (зависит от многих факторов) компилятор в случае с WITH сгенерирует более эффективный код, нежели без WITH  


> они делфийский with чморили, мол, толку от него мало и только
> источник ошибок


если нет четкого понимания логики компилятора и/или руки кривые, то ошибки можно понаделать где угодно - хоть с WITH, хоть без WITH, хоть в Си, хоть ..


ANB   (2005-08-04 10:31:00) [39]


> например, оператор WITH минимизирует "лишние телодвижения"
> в результирующем исп.коде :

А как он оптимизирует ? И как быть в CBuilder ?
Это не наезд, просто интересно. Был как то давно на форуме сишников, так они делфийский with чморили, мол, толку от него мало и только источник ошибок.

Автору :
1) срубить индексы, триггера (если они не делают чего то очень нужного) и контстрейнты (если уверен в данных).
2) В цикле чтения - записи оставить только присвоение параметров.
3) Если основная загрузка - на сервере, то код у тебя почти оптимален, скорее всего ты не все запостил.


Digitman   (2005-08-04 09:08:00) [40]


> Defunct ©   (04.08.05 05:14)  


перед проведением массированных вставок отключай соотв.индексы (если это, конечно, допустимо по логике) - их обновление всякий раз при вставке очер.записи занимает немалое время

ну и оптимизация кода в [2], конечно же, не помешает .. например, оператор WITH минимизирует "лишние телодвижения" в результирующем исп.коде :

вместо

IQuery.ParamByName('ID').AsInteger := ..
IQuery.ParamByName('FKEY').AsInteger := ..
и т.д. ..

следовало бы

with IQuery do
begin
..
 Params[0].AsInteger := .. //обращение к параметру по его индексу в списке заведомо быстрее обращения по имени
 Params[1].AsInteger := ..
 ..
 Params[..].AsSomething := ..
..
 ExecSQL;
..
end


> В качестве исходных данных - текстовые файлы


здесь тоже вполне м.б. "узкое место", и то как ты читаешь из файла - отдельный вопрос ..


Страницы:   1 2 3

Наверх

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