Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Interbase .... уходит слишком много времени...   Найти похожие ветки 

 
pok   (2004-05-20 16:06) [0]

Доброе время суток  уважаемые мастера!
У меня такой вопрос..
Я загружаю даные из текстового файла в котором 600тыс. записей  в таблицу INTERBASE используя компненты IBX.
Добавление новых записей происходит с помощью компонента IBQuery
и insert into.....values...
полностью перегонка даных происходит гдето за 10мин.
как можна прискорить этот процес...
и ещо одно, после того как я удаляю все записи з бази (delete from table1) размер базы на диске не уминшаетсья....почему и как это исправить..???
Зарание благодарен!!!!!!!!


 
Vlad ©   (2004-05-20 16:11) [1]


> полностью перегонка даных происходит гдето за 10мин.
> как можна прискорить этот процес...

Ну вобще-то очень даже нормальное время, сомневаюсь что удастся существенно ускорить.
Общие рекомендации такие: отключить все индексы в таблице, использовать запрос с параметрами.

> и ещо одно, после того как я удаляю все записи з бази (delete
> from table1) размер базы на диске не уминшаетсья....почему
>

Backup/Restore
Читай статьи на ibase.ru там все про это написано


 
pok   (2004-05-20 16:12) [2]

Пробовал с DBF...время гдето около 1 мин.


 
Desdechado ©   (2004-05-20 16:15) [3]

в одной транзакции, возможно, будет быстрее

по поводу размера не волнуйся, так надо, просто потом это незадействованное место будет заниматься по мере необходимости другими данными уже без прироста размера БД


 
Vlad ©   (2004-05-20 16:17) [4]


> pok   (20.05.04 16:12) [2]
> Пробовал с DBF...время гдето около 1 мин.

С большим трудом верится.

С транзакциями как работаешь ? подтверждаешь после каждого insert или один раз в конце ?


 
pok   (2004-05-20 16:19) [5]

Транзакция один раз в конце..


 
Vlad ©   (2004-05-20 16:20) [6]


> pok   (20.05.04 16:19) [5]

сами запросы как формируешь, с параметрами или как ?


 
Digitman ©   (2004-05-20 16:21) [7]

если такая разница во времени, то значит ты криво или неоптимально считываешь данные из текст.файла, прежде чем вставить их

ты поди в стринг-лист записи грузишь при считывании ?


 
pok   (2004-05-20 16:22) [8]

Запрос
insert into table1(Name1,Name2,Name3) values("XXX","ZZZ","YYY")


 
pok   (2004-05-20 16:26) [9]

1.Считал строку из файла
2.Разбил на части и просвоил переменным
3.Сформировал запрос
4.Виполнил запрос

и с DBF и с Interbase  процедура считования одна и та же..


 
Vlad ©   (2004-05-20 16:26) [10]


> pok   (20.05.04 16:22) [8]

говорю, чтобы быстрее было, запрос с параметрами делать надо:
insert into table1(Name1,Name2,Name3) values(:Name1,:Name2,:Name3) - фирштейн ?
Однако это такого уж значительного ускорения не даст.
Сколько полей в таблице и каких типов ?


 
pok   (2004-05-20 16:27) [11]

Всего 14 полей
13 - Varchar
1- Longint


 
Курдль ©   (2004-05-20 16:28) [12]

А если сначала все данные из таблицы единым скриптом оформить, а потом его разом залить?


 
Vlad ©   (2004-05-20 16:28) [13]


> pok   (20.05.04 16:27) [11]
> Всего 14 полей
> 13 - Varchar
> 1- Longint

Батенька, не надо лапшу людям вешать по поводу одной минуты.
10 минут для такого объема данных - это нормально.


 
Digitman ©   (2004-05-20 16:36) [14]


> 1.Считал строку из файла
> 2.Разбил на части и просвоил переменным


вот здесь и есть "засада" :

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

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


 
Соловьев ©   (2004-05-20 16:42) [15]


> полностью перегонка даных происходит гдето за 10мин.

Делать коммиты каждые 5-10 тыс записей.


 
Курдль ©   (2004-05-20 16:44) [16]


> говорю, чтобы быстрее было, запрос с параметрами делать
> надо:
> insert into table1(Name1,Name2,Name3) values(:Name1,:Name2,:Name3)
> - фирштейн ?
> Однако это такого уж значительного ускорения не даст.

Это с какого перепугу, интересно?


 
Vlad ©   (2004-05-20 16:45) [17]


> Digitman ©   (20.05.04 16:36) [14]

Даже если выбросить операцию с текстовым файлом, то 600 тыс записей при 13 varchar полях ну никак за одну минуту не пройдут.
Это значит скорость вставки д.б. 10000 записей/сек.
При двух-трех полях в базе такая скорость еще возможна, но не более. Да и то если база локальная, а по сети еще медленнее.


 
Vlad ©   (2004-05-20 16:49) [18]


> Курдль ©   (20.05.04 16:44) [16]
> Это с какого перепугу, интересно?

Пугается она параметров. И с перепугу быстрее работает.


 
Соловьев ©   (2004-05-20 16:51) [19]

Быстрее всего работать будет, если создать скрипт написать через каждые 5-10 тыс commit и послать его на ibsql.exe


 
Johnmen ©   (2004-05-20 16:52) [20]

При массовой вставке коммиты, насколько помню, рекомендуется делать через каждые ~500 записей.


 
Курдль ©   (2004-05-20 16:58) [21]


> Johnmen ©   (20.05.04 16:52) [20]
> При массовой вставке коммиты, насколько помню, рекомендуется
> делать через каждые ~500 записей.

Кем это, интересно, рекомендуется? Лучшими собаководами?
Я проверил у меня в 2-х СУБД заливка скрипта 20 000 строк (это, конечно, не 600 000) записей в 4 разные таблицы последовательно (банки со всеми их адресами, счетами и телефонами) промелькивают за 30 секунд. Коммит в конце.


 
Digitman ©   (2004-05-20 17:06) [22]


> Vlad ©   (20.05.04 16:45) [17]
>  
> Даже если выбросить операцию с текстовым файлом, то 600
> тыс записей при 13 varchar полях ну никак за одну минуту
> не пройдут.


да хоть за полчаса ! не столь это важно здесь ..

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


 
Johnmen ©   (2004-05-20 17:07) [23]

>Курдль ©   (20.05.04 16:58) [21]

См. тип СУБД в вопросе автора. Речь не о сабаках по-моему...
Проверять можешь хоть на Informix, хоть на Revelation, хоть на кошках.


 
jack128 ©   (2004-05-20 17:18) [24]


> Кем это, интересно, рекомендуется? Лучшими собаководами?
эти рекомендации давались разработчиками IB.


> Я проверил у меня в 2-х СУБД заливка скрипта 20 000 строк
> (это, конечно, не 600 000) записей в 4 разные таблицы последовательно
> (банки со всеми их адресами, счетами и телефонами) промелькивают
> за 30 секунд. Коммит в конце.

600000/20000 * 30 = 900 сек = 15 минут, а автор это за минут умудряется сделать ;-)

А вот можно такой вопрос, что за задача такая? Все таки, думаю, такие объемы не каждый день гоняются, народу что, лень 10 минут перекурить? ;-)


 
Vlad ©   (2004-05-20 17:24) [25]


> Курдль ©   (20.05.04 16:58) [21]

Неоптимально делаешь, видишь как jack128 быстро посчитал :)


 
pok   (2004-05-20 18:24) [26]

Задача это такая....есть цыфровая междугородняя станция которая создаёт текстовий файл с информацией о разговорах....перекачка файла на ПК происходит каждых 2 часа и занимает где то 15мин. после этого нужно этот файл загнать в базу проанализировать, распечатать и зделать архивную копию...
все это уже работает в тестовом режыме но все равно слишком много
времени уходит на перегонку базы....


 
Vlad ©   (2004-05-20 18:41) [27]


> pok   (20.05.04 18:24) [26]

Ну не получится у тебя быстро загнать 600 тыс. записей в таблицу с 13 varchar полями !

Хотя есть впринципе мысль.
Что если разбить твой текстовый файл к примеру на 5 частей, затем создать 5 потоков (TThread), которые одновременно будут писать в базу ? Я просто не знаю как IB работает в потоках, но например в Оракле я такую штуку делал, скорость перекачки взлетала раз в 5


 
jack128 ©   (2004-05-20 18:47) [28]

вообще мое имхо, чтот существенноты скорость закачки данных в базу не увеличишь. Разве, что покопать в сторону external files, возможно решение здесь...


 
Vlad ©   (2004-05-20 18:51) [29]


> jack128 ©   (20.05.04 18:47) [28]

Нет, почему же, с несколькими потоками можно очень даже существенно увеличить скорость, говорю же, я на Оракле именно так и делал. Но я не знаю как IB ведет себя в потоках


 
jack128 ©   (2004-05-20 18:55) [30]

Еще раз внемательно перечитал ветку :-) Но так и не увидел коментарий автора на реплику Digitmen"a. Какое соотношение по времени на парсинг текст файла и вставки данных в базу. Что оптимизируем то???

> Но я не знаю как IB ведет себя в потоках
я то же. Поэтому предложил очевидный вариант. В принципе при удачном стечении обстоятельств все это можно закинуть в базу за 1 сек при помощи внешних файлов.


 
Курдль   (2004-05-20 23:22) [31]

А если написать процедурину, принимающую параметрами эти самые 14 полей без лишнего текста, то можно уменьшить сетевой трафик в несколько раз.


 
Mike Kouzmine ©   (2004-05-20 23:57) [32]

За 1 минуту с разбором строк из текстового файла - может быть, но верится с трудом. 10 минут для перегона 600000 вполне приемлимое время. Тем более раз в 2 часа. Еще времени останеться чтобы чай попить.


 
Digitman ©   (2004-05-21 08:08) [33]

использование доп.потоков никак не влияет на конечную производительность


 
Vlad ©   (2004-05-21 09:44) [34]


> Digitman ©   (21.05.04 08:08) [33]
> использование доп.потоков никак не влияет на конечную производительность

Сомнительное утверждение, тем более что опровергнутое практикой
(если конечно под конечной производительностью понимается скорость добавления записей в базу)


 
Tomkat   (2004-05-21 10:19) [35]

а по-моему, нада копать в др. сторону : пусть АТС пишет не в текстовый файл, а во что-то, что похоже на БД...как и во что - это уже домыслить нада ....у нас станция пишет в Paradox и ниче ...


 
Соловьев ©   (2004-05-21 10:21) [36]


> [35] Tomkat   (21.05.04 10:19)

так пусть уж пишет сразу туда куда надо :) зачем лишнее звено? :)


 
Rule ©   (2004-05-21 10:38) [37]

и я согласен с тем что 10 минут это номрально, скорость света не переплюнешь :(
может мне мало тактовой частоты процессора в 10 Гигагерц, и меня не волнует что природно больше не возможно сделать, так что теперь ?



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.03 c
4-1083989471
-=DoN=-
2004-05-08 08:11
2004.06.13
Account information


6-1080720932
devil_83
2004-03-31 12:15
2004.06.13
Простой почтовый сервер


1-1086158175
Anton
2004-06-02 10:36
2004.06.13
Типы данных


14-1085372303
defen
2004-05-24 08:18
2004.06.13
GeForce4 MX 440


1-1086097223
denis24
2004-06-01 17:40
2004.06.13
длинный путь к файлу