четверг, 1 апреля 2010 г.

Вставка большого количества записей в Firebird

Домучиваю потихоньку перенос КЛАДР в Firebird. Ну а для этого основная операция - вставка громадного числа записей.

Первоначально шел по пути обработки данных из dbf КЛАДРа на клиенте, и вставке их на сервер. Отключал индексы на таблице, вставлял по одной записи (т.е. не блок из нескольких), коммитил через 1000 вставок. Скрость работы  примерно минут 30-40 на 1000000 записей кладра.

Потом узнал о external table. Не сложной манипуляцией dbf файл адоптируется в нужный вид(обрезаем заголовок ), кидается на сервер. На сервере мы его подключаем как внешнюю таблицу и работаем с ним. Плюс написал хранимые процедуры для обработки данных и вставки их (то, что раньше делал на клиенте). Итог - не считая подготовления файлов (а оно занимает от силы не более минуты), этот же миллион записей загрузился за 3,5 минуты.

клиент в первом случае и сервер во втором это одна и таже машина.

Доволен как удав :-)

2 комментария:

  1. Здравствуйте!
    У меня вопрос - а как Вы отключали индексы?
    Я вот пытался отключить через "ALTER INDEX IndexName ACTIVE/INACTIVE" но это не помогло, я так понимаю оно влияет только на чтение. Помогло только DROP Index.

    Спасибо.

    ОтветитьУдалить
  2. Приветсвую.
    Вообще ALTER INDEX должен помочь. Влияет оно и на чтение и на запись. При отключенном идексе чтение медленнее идет, при включенном запись. Надо проверять на конкретной версии firebird`а.
    конкретнее подсказать уже не смогу, т.к. ушел от firebird и delphi в сторону oracle. И походу не предвидится возвращение.

    ОтветитьУдалить