Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "Бази";
Поточний архів: 2002.01.08;
Завантажити: [xml.tar.bz2];

Вниз

Швидкий доступ до БД ORACLE Знайти схожі гілки


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]

Это уже хуже.Придется уважно почитать про параметры хранения 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]

Проще всего оценить выигрыш по времени, написав
починати
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]

"обозванную внешней" можно написать и на Delphi, и на ассемблере, главное - сишные соглашения о вызовах. Насчет Wintel - в документации есть шикарная фраза, ( перевод мой) - "external procedures поддерживаеюся на любой платформе, поддерживающй DLL, например 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 минуты.
И ничего тут, кроме как перенести расчет на сервер сделать нельзя.

Александр Свириденков



сторінки: 1 вся гілка

Форум: "Бази";
Поточний архів: 2002.01.08;
Завантажити: [xml.tar.bz2];

наверх









Пам'ять: 0.87 MB
Час: 0.037 c
14-22347
roman001
2001-11-06 18:09
2002.01.08
Хостинг


1-22060
Atrem
2001-12-18 19:18
2002.01.08
Метод Insert Richedit-а


4-22493
mangoost
2001-11-05 12:06
2002.01.08
Як обійти Access violation при спробі запису (+)


1-22160
Yakudza
2001-12-20 16:46
2002.01.08
Скопіювати в Clipboard


1-22177
Вирізати
2001-12-21 09:38
2002.01.08
Чому не работют геп в





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в&#39;єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська