Casa
Top.Mail.Ru Yandeks.Metrika
Fórum: "Bases";
Arquivo atual: 2002.01.08;
Download: [xml.tar.bz2];

Para baixo

Acesso rápido ao ORACLE DB Encontre agências semelhantes


Yelchev   (2001-12-03 10:26) [0]

Есть проблема Существует БД вней порядка миллиона записей с блоб полями. Исспользую компонент Oracle Direct Acess. Чтение занимает очень много времени. Как оптимизировать чтение таблицы по времени и какие есть компоненты более быстрого доступа к БД. Для примера скажу чтоб выбрать 25000 записей каждая объемом 20К необходимо 15 мин



Владислав   (2001-12-03 11:22) [1]

Текст запроса в студию.



petr_v_a   (2001-12-03 11:24) [2]

Более быстрые компоненты врядли существуют, если кто-то и быстрее, то не в разы. Встречный вопрос - зачем тащить на клиента 25000 записей? Пользователь не воспримет больше 50-100 записей в гриде, захочет дополнительный "поиск в найденном" и пр. прелести. На уровне базы почитайте про параметры хранения LOB, там страниц 100



Yelchev   (2001-12-03 12:22) [3]

Пользователю вообще ничего не светится происходит следующее с записей выбирается Влоб масивы потом они проходят математические расчеты и в конце сравнения выводится небольшой список. Никакие гриды не используются. Может кто подскажет вообще как решить проблему быстрой работы с такой базой. Ведь при объеме в 1000000 записей вообще процесс чтения займет пол дня! Всем ответившим буду очень благодарен ))



Yuvich   (2001-12-03 12:44) [4]

А-а-а, так значит не выборка длится ~15мин., а обработка блобов длится 15мин. Тут надо посмотреть: что хранится в блобе - структурированная информация или нет. Если структурированная, то надо положить ее в таблицы и обработку делать не на этапе выборки, а на этапе записи в таблицу. Если не структурированная, то все равно попытаться представить информацию в виде структуры. Как сказал один математик: "нет такой предметной области, которую нельзя было бы представить в виде иерархической структуры".



Yelchev   (2001-12-03 12:50) [5]

Да нет совсем не так. Я делал експеременты просто по выборке данных без какой либо обработки. А структурировать данные нельзя связи стем что это массивы которые описывают обработаное изображение и нельзя их разделить! Вообще где можно что то почитать о решении таких проблем связаных с использованием надбольших БД



petr_v_a   (2001-12-03 13:33) [6]

Это уже хуже.Придется cuidadosamente почитать про параметры хранения LOB :). По v$session_wait и v$system_event посмотрите, на что реально тратится время.Если обсчитываются такие объемы BLOB, может, стоит подумать про external procedures.Вообще, по моему впечатлению, Oracle не очень хорошо качает большие объемы на клиента.



Yelchev   (2001-12-03 13:55) [7]

А на сколько я получу выиграш по времени если встраивать сравнение в оболочку оракла (если это возможно и не качать информацию на клиента при условии что сравнение массивов хранящихся в вбоб необходимо переобразование фурье и другие арифметические операции + выделение большого числа памяти (до 29М)



Mick   (2001-12-03 14:05) [8]

Если Oracl на Wintel, то я бы перенес обработку блобов на сервер. То есть обычная трехзвенка.



Yelchev   (2001-12-03 14:11) [9]

"То есть обычная трехзвенка"? Прошу прощения за непонятливость но что это означает?



petr_v_a   (2001-12-03 14:29) [10]

Проще всего оценить выигрыш по времени, написав
começar
for cr in (<ваш запрос>) loop
null;
end;
end;
и посмотрев, сколько выполняется это



Yuvich   (2001-12-03 15:48) [11]

Mike правильно говорит - надо вынести обработку на сервер, тогда скорость обработки будет зависеть от мощности сервера, а не от мощности клиента.

Даже если Oracle не на Wintel, можно написать процедуру PL/SQL и вызывать из нее другую процедуру обозванную внешней и написанной, к примеру на С или Cobol. Другое дело, что надо знать язык операционки, на которой стоит Oracle и поддерживает вызов Ораклом. Чтобы быть точнее - надо почитать документаци.



petr_v_a   (2001-12-03 16:29) [12]

"chamado externo" pode ser escrito tanto no Delphi quanto no montador, o principal é os contratos de chamada telefônica. Quanto ao Wintel, existe uma frase inteligente na documentação, (minha tradução) - "procedimentos externos são suportados em qualquer plataforma que suporte uma DLL, por exemplo Solaris" :))



Yuvich   (2001-12-03 17:12) [13]

Я не думаю, что DLL, написанную на Delphi, можно использовать на Solaris, поэтому я и говорю - надо писать, хоть на ассемблере, на том языке, чей компилятор есть в ОС.

По поводу "шикарной фразы" некоторое дополнение: ... поддерживающей DLL или динамически загружаемые, разделяющие доступ, библиотеки ... , например Solaris .so библиотеки.



Yuvich   (2001-12-03 17:15) [14]

Из той же документации фраза:

So, some tasks are more quickly or easily done in a lower-level language such as C, which is more efficient at machine-precision calculations. For example, a Fast Fourier Transform (FFT) routine written in C runs faster than one written in PL/SQL.



petr_v_a   (2001-12-03 17:53) [15]

>Yuvich :) Ну ладно те, не собирался я DLL, написанную на Delphi,использовать на Solaris :) Смысл-то был в том, чо писать можно на чем угодно, лишь бы вызов был сишным. То, оно должно запуститься, понятно :)



Yuvich   (2001-12-03 18:02) [16]

> petr_v_a
Ничего личного. Возможно, я чего-то не понял.



ASV   (2001-12-04 03:11) [17]

А арифметика тут очень простая. Сетка, то у вас, вероятно 10Мб стоит?
Так 25000*20К=500000К что, при средней пропускной способности сети в 600К/сек дает 13,8 минуты.
И ничего тут, кроме как перенести расчет на сервер сделать нельзя.

Alexander Sviridenkov



Страницы: 1 filial inteira

Fórum: "Bases";
Arquivo atual: 2002.01.08;
Download: [xml.tar.bz2];

em cima









Memória: 0.87 MB
Hora: 0.041 c
1-22114
Aleksandr
2001-12-19 19:28
2002.01.08
Como coletar cor de número e brilho?


7-22421
Shen
2001-08-28 15:05
2002.01.08
Upload de dados via com porta


14-22327
fliz
2001-11-05 15:39
2002.01.08
e eles dizem que o dia depois de amanhã feriado?


6-22312
Leviatã
2001-10-15 00:24
2002.01.08
Ei, quem sabe Indy? Precisa de ajuda!


1-22132
Leviatã
2001-12-19 19:38
2002.01.08
Esconder forma





afrikaans albanês Arabic armênio azerbaijano basco belarusian Bulgarian catalão Chinês simplificado) Chinês tradicional) croata checo dinamarquês Dutch Inglês estoniano filipino Finnish French
Galego georgiano German grego crioulo haitiano hebraico hindi húngaro islandês Indonesian irlandês Italian Japanese Korean letão lituano macedónio Malay maltês Norwegian
persa polonês Portuguese romeno Russa sérvio Slovak esloveno espanhol swahili sueco tailandês turco ucraniano urdu vietnamita galês ídiche bengali bósnio
cebuano esperanto gujarati hausa hmong igbo javanês kannada khmer lao latino maori marata mongol Nepali punjabi somali tâmil telugu yoruba
zulu
Английский francês Alemão Italiano Португальский russo Espanhol