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