Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.037 c
1-1086151146
Maestro
2004-06-02 08:39
2004.06.13
access violation и Abstract error для чайников


4-1083872851
Dmitriy Volkov
2004-05-06 23:47
2004.06.13
Как узнать права юзера?


1-1085738342
RoadStar
2004-05-28 13:59
2004.06.13
Перечислитель окон


6-1082487800
Valerik
2004-04-20 23:03
2004.06.13
ServerSocket обрыв соединения?


1-1085826018
Гибон
2004-05-29 14:20
2004.06.13
Приложения на Delphi & DLL на Visual C++





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский