![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Interbase .... уходит слишком много времени... [D7, IB6.x]
pok © (2004-05-20 16:06:00)Доброе время суток уважаемые мастера!
У меня такой вопрос..
Я загружаю даные из текстового файла в котором 600тыс. записей в таблицу INTERBASE используя компненты IBX.
Добавление новых записей происходит с помощью компонента IBQuery
и insert into.....values...
полностью перегонка даных происходит гдето за 10мин.
как можна прискорить этот процес...
и ещо одно, после того как я удаляю все записи з бази (delete from table1) размер базы на диске не уминшаетсья....почему и как это исправить..???
Зарание благодарен!!!!!!!!
Rule (2004-05-21 10:38:00) [1]и я согласен с тем что 10 минут это номрально, скорость света не переплюнешь :(
может мне мало тактовой частоты процессора в 10 Гигагерц, и меня не волнует что природно больше не возможно сделать, так что теперь ?
Соловьев (2004-05-21 10:21:00) [2]
> [35] Tomkat (21.05.04 10:19)
так пусть уж пишет сразу туда куда надо :) зачем лишнее звено? :)
Tomkat (2004-05-21 10:19:00) [3]а по-моему, нада копать в др. сторону : пусть АТС пишет не в текстовый файл, а во что-то, что похоже на БД...как и во что - это уже домыслить нада ....у нас станция пишет в Paradox и ниче ...
Vlad (2004-05-21 09:44:00) [4]
> Digitman © (21.05.04 08:08) [33]
> использование доп.потоков никак не влияет на конечную производительность
Сомнительное утверждение, тем более что опровергнутое практикой
(если конечно под конечной производительностью понимается скорость добавления записей в базу)
Digitman (2004-05-21 08:08:00) [5]использование доп.потоков никак не влияет на конечную производительность
Mike Kouzmine (2004-05-20 23:57:00) [6]За 1 минуту с разбором строк из текстового файла - может быть, но верится с трудом. 10 минут для перегона 600000 вполне приемлимое время. Тем более раз в 2 часа. Еще времени останеться чтобы чай попить.
Курдль (2004-05-20 23:22:00) [7]А если написать процедурину, принимающую параметрами эти самые 14 полей без лишнего текста, то можно уменьшить сетевой трафик в несколько раз.
jack128 (2004-05-20 18:55:00) [8]Еще раз внемательно перечитал ветку :-) Но так и не увидел коментарий автора на реплику Digitmen'a. Какое соотношение по времени на парсинг текст файла и вставки данных в базу. Что оптимизируем то???
> Но я не знаю как IB ведет себя в потоках
я то же. Поэтому предложил очевидный вариант. В принципе при удачном стечении обстоятельств все это можно закинуть в базу за 1 сек при помощи внешних файлов.
Vlad (2004-05-20 18:51:00) [9]
> jack128 © (20.05.04 18:47) [28]
Нет, почему же, с несколькими потоками можно очень даже существенно увеличить скорость, говорю же, я на Оракле именно так и делал. Но я не знаю как IB ведет себя в потоках
jack128 (2004-05-20 18:47:00) [10]вообще мое имхо, чтот существенноты скорость закачки данных в базу не увеличишь. Разве, что покопать в сторону external files, возможно решение здесь...
Vlad (2004-05-20 18:41:00) [11]
> pok (20.05.04 18:24) [26]
Ну не получится у тебя быстро загнать 600 тыс. записей в таблицу с 13 varchar полями !
Хотя есть впринципе мысль.
Что если разбить твой текстовый файл к примеру на 5 частей, затем создать 5 потоков (TThread), которые одновременно будут писать в базу ? Я просто не знаю как IB работает в потоках, но например в Оракле я такую штуку делал, скорость перекачки взлетала раз в 5
pok (2004-05-20 18:24:00) [12]Задача это такая....есть цыфровая междугородняя станция которая создаёт текстовий файл с информацией о разговорах....перекачка файла на ПК происходит каждых 2 часа и занимает где то 15мин. после этого нужно этот файл загнать в базу проанализировать, распечатать и зделать архивную копию...
все это уже работает в тестовом режыме но все равно слишком много
времени уходит на перегонку базы....
Vlad (2004-05-20 17:24:00) [13]
> Курдль © (20.05.04 16:58) [21]
Неоптимально делаешь, видишь как jack128 быстро посчитал :)
jack128 (2004-05-20 17:18:00) [14]
> Кем это, интересно, рекомендуется? Лучшими собаководами?
эти рекомендации давались разработчиками IB.
> Я проверил у меня в 2-х СУБД заливка скрипта 20 000 строк
> (это, конечно, не 600 000) записей в 4 разные таблицы последовательно
> (банки со всеми их адресами, счетами и телефонами) промелькивают
> за 30 секунд. Коммит в конце.
600000/20000 * 30 = 900 сек = 15 минут, а автор это за минут умудряется сделать ;-)
А вот можно такой вопрос, что за задача такая? Все таки, думаю, такие объемы не каждый день гоняются, народу что, лень 10 минут перекурить? ;-)
Johnmen (2004-05-20 17:07:00) [15]>Курдль © (20.05.04 16:58) [21]
См. тип СУБД в вопросе автора. Речь не о сабаках по-моему...
Проверять можешь хоть на Informix, хоть на Revelation, хоть на кошках.
Digitman (2004-05-20 17:06:00) [16]
> Vlad © (20.05.04 16:45) [17]
>
> Даже если выбросить операцию с текстовым файлом, то 600
> тыс записей при 13 varchar полях ну никак за одну минуту
> не пройдут.
да хоть за полчаса ! не столь это важно здесь ..
я не об этом, а об относительной разнице во времени в случае с упомянутыми источниками данных
Курдль (2004-05-20 16:58:00) [17]
> Johnmen © (20.05.04 16:52) [20]
> При массовой вставке коммиты, насколько помню, рекомендуется
> делать через каждые ~500 записей.
Кем это, интересно, рекомендуется? Лучшими собаководами?
Я проверил у меня в 2-х СУБД заливка скрипта 20 000 строк (это, конечно, не 600 000) записей в 4 разные таблицы последовательно (банки со всеми их адресами, счетами и телефонами) промелькивают за 30 секунд. Коммит в конце.
Johnmen (2004-05-20 16:52:00) [18]При массовой вставке коммиты, насколько помню, рекомендуется делать через каждые ~500 записей.
Соловьев (2004-05-20 16:51:00) [19]Быстрее всего работать будет, если создать скрипт написать через каждые 5-10 тыс commit и послать его на ibsql.exe
Vlad (2004-05-20 16:49:00) [20]
> Курдль © (20.05.04 16:44) [16]
> Это с какого перепугу, интересно?
Пугается она параметров. И с перепугу быстрее работает.