Как организовать перенос записей из БД в БД

Администирование клиентской и серверной части InterBase, Firebird, Yaffil. Настройка файла конфигурации и т.п.

Модераторы: kdv, Alexey Kovyazin

Ответить
Sashka4000
Сообщения: 7
Зарегистрирован: 08 июл 2006, 18:41

Как организовать перенос записей из БД в БД

Сообщение Sashka4000 » 03 ноя 2006, 10:19

Эта тема конечно перекликается со многими озвученными, но...

Есть большая порядка 1 GB БД в которой в основном 1 большая таблица порядка 14 млн. записей размер страницы БД 4К
Задача выполнить архивирование данных с временем записи < T
Т.е. результат две БД - старая БД и новая БД с данными > T

Делаю так.
1. select из таблицы большой БД в файл (USE Delphi IBSQL BatchOutput) где время > T
2. gbak - структуры
3. gbak - восстанавкливаем
4. Удаляем индексы на таблицу
5. Insert данных в таблицу новой БД (delphi IBSQL BatchInput)
6. Восстанавливаю индексы.

Вопрос. У меня скорость добавления данных около 100 записей в секунду, а что быстрее это нельзя делать?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 03 ноя 2006, 11:01

Можно и нужно.
Заливка данных, да ещё без индексов, ведётся на порядок быстрее обычно.
К сожалению, не вижу, как именно ты заливаешь, кроме того, что для этого используется BatchInput.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 03 ноя 2006, 12:10

Мда... на ибэйз тоже пятница...

А сбэкапить БД, потом отресторить рядышком потом на обе БД натравить delete from... where some_date > ..., на другую натравить delete from... where some_date < ... . Мона потом для обоих половинок проделать бэкап/рестор, для прохвилактики.

Данные нахрена на клиента тянуть? Шоб слоники бегали?

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 03 ноя 2006, 12:15

О я проспал раздачу слонов?
"Заслуженный разработчик"... прикольно 8)

Sashka4000
Сообщения: 7
Зарегистрирован: 08 июл 2006, 18:41

Сообщение Sashka4000 » 03 ноя 2006, 12:55

WildSery писал(а):Можно и нужно.
Заливка данных, да ещё без индексов, ведётся на порядок быстрее обычно.
К сожалению, не вижу, как именно ты заливаешь, кроме того, что для этого используется BatchInput.
insert into TABLE1 (p1,p2,p3) values (:p1,:p2,:p3)

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 03 ноя 2006, 13:21

Надеюсь, ты обратил внимание на правильное решение Ивана?
Если же вдаваться в скорость глубже, то кроме собственно SQL, есть ещё Delphi, где описаны транзакции, заполнение этих самых параметров и тому подобное.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 03 ноя 2006, 13:24

Sashka4000 писал(а):
WildSery писал(а):Можно и нужно.
Заливка данных, да ещё без индексов, ведётся на порядок быстрее обычно.
К сожалению, не вижу, как именно ты заливаешь, кроме того, что для этого используется BatchInput.
insert into TABLE1 (p1,p2,p3) values (:p1,:p2,:p3)
Моя тихо сползать на пол и ну валяться... :lol:
Автор, Вы не читать пробовали? Для того чтоб расколоть БД на 2 не надо ее тянуть на клиента и потом по одной записи пихать обратно. Это можно сделать на 2 порядка быстрее, прямо на сервере!

... А теперь посмотри как я снесу промеж ног... (с, Балда)
Помнишь как оне лошадь носили? так вот сейчас ты пытаешься нести лошадь как тот чертенок... что Эээ.. несколько неразумно... :wink:

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 03 ноя 2006, 13:34

Да даже если тянуть на клиента, для таблицы из трех полей это будет как минимум на порядок быстрее 100 записей/сек. Даже со всеми индексами и триггерами. Что-то в консерватории явно не то...

Ответить