|
|
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton Demidov DPHПросто моя текущая система (одна из), так сложилось, в качестве БД использует Oracle - и я постоянно слышу от DBA (с ссылками на документацию и Кейта), что бизнес-логику эффективнее реализовать внутри БД. Правда, пояснить, почему так лучше, DBA так и не смог. Потестируем? Только в новой ветке, а то здесь уже тесно стало. Предлагаю создать пару таблиц по миллиону записей и сделать с ними что-нибудь (на ваш вкус) из Явы. Я, в свою очередь, напишу аналог на PL/SQL. У вас же Оракл есть - запустите пару раз и результаты тайминга сюда в форум потом на обсуждение. В общем начал ветку. И просоединяюсь к тестированию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 17:41 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Что будем обрабатывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 17:46 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton DemidovЧто будем обрабатывать?А есть какой либо простой алгоритм, который вы у себя используете? Сами данные тоже можно сгенерить алгоритмом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 17:48 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Может что-нибудь типа подсчёта остатков? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 17:52 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
кул, как я люблю мерятся нужен такой алгоритм, какой заставит процедурно колбасить данные, иначе все сведется к меренью SQL диалектов (если DPH присоединится). подсчет остатков не сведется к одному-двум SQL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 18:15 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Именно это я и хотел показать: три тайминга для реализации на чистом SQL реализации на PL/SQL реализации на Java Помнишь, тут кто-то засомневался в истинности заявлений Тома Кайта, что именно этот порядок отражает скорость обработки данных? Я сейчас готовлю скрипты для теста. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 18:27 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. P.S. Я тут особо не заморачивался - если есть желание что-то усложнить - предложения в студию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 18:41 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton DemidovИменно это я и хотел показать: три тайминга для реализации на чистом SQL реализации на PL/SQL реализации на Java Помнишь, тут кто-то засомневался в истинности заявлений Тома Кайта, что именно этот порядок отражает скорость обработки данных? Я сейчас готовлю скрипты для теста. Код: plaintext 1. зачем ? такой тест есть в книге Кайта со всеми пояснениями за счет каких архитектурных особеностей оракла получаются такие результаты. тут все ясно, сомневающихся отправим читать Кайта, а не "одна бабка сказала". имхо было бы гораздо интересней взять реальную задачу и реализовать средствами pl/sql и апп-сервером/java и замерить, кол-во кода, скорость и т.п. просто меня волнует, чтоб задачка не сведась к одному SQL и апп-сервер просто бы не распечатал результат выданый субд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 18:46 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Yo.!зачем ? такой тест есть в книге Кайта со всеми пояснениямиАх если бы это было возможно в обязательном порядке заставлять всех читать Кайта перед началом работы с Ораклом. К сожалению, это совершенно нереально. А так я им предлагаю шанс самим попробовать. Собственный опыт - он ценнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 18:54 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Извините, забыл команды сбора статистики во избежание недоразумений Код: plaintext 1. 2. 3. 4. Теперь я жду от VoDA код на Яве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 19:02 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
у меня такое предложение. сгенерить побольше табличку, чтоб она гарантирована сильно не влезла бы в память, миллионов на 500 записей, там одно поле телефона. задача распарсить тучу вариантов написания номера телефона и разложить код страны и очищеный номер по разным полям. не знаю умеет ли db2 regexp в SQL, но можно 2 варианта проверить - с regexp в SQL и с запретом на использования regexp. вот тут на апп-сервер и замерим, как ему понравится тягать гигобайты в свою память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 19:03 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton DemidovАх если бы это было возможно в обязательном порядке заставлять всех читать Кайта перед началом работы с Ораклом. Читать - недостаточно, надо еще понять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 20:08 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Не, давайте лучше скользящее среднее посчитаем. Еще и c парой десятков дополнительных правил расчета, зависящих от фазы луны ;) А лучше даже не одно, а штук десять разных средних. И, например, в таблицу добавляются значения со скоростью 100 в секунду (поштучно, в транзакциях), а запросы на, например, среднее отклонение скользящих средних за последние пять секунд приходят со скоростью 200 в секунду ;) А еще могу вспомнить бизнес-логику со старого проекта и вытащить правила расчета ставок в английском букмекерском бизнесе. И некоторые правила risk-managmentа там же. И реализовать нужно все на чистом SQL, разумеется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 22:05 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Вы отвлекаетесь от основной задачи этого тестирования - сравнить скорость PL/SQL и Java. Решение на чистом SQL будет дано здесь, но только вне конкурса. Мы все (я надеюсь) прекрасно понимаем, что оно будет быстрее всех. Очевидно, что чем дальше мы отходим от реляционных задач (это к вашей "фазе луны"), тем выгоднее использовать универсальные ЯП типа С или Явы. С другой стороны, чем больше данных вам надо перебрать (это я по поводу таблицы на пол милиарда записей, предложенной Yo.! ), тем "ближе" надо находится к БД для уменьшения издержек на пересылку данных. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 22:59 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
2Anton Demidov несогласная я, если мы чуток усложним задачу, не только последние 5 секунд, но и в сравнении с 30-60-200 минут - так чтоб необходимо было тащить данные из субд, а не из кеша апп-сервера, то готовые алгоритмы не компенсируют оверхед доступа к данным. только это на порядок сложней тест и скорее всего уткнется в тюнинг субд, а не языков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 00:26 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Увы, а у меня именно такого типа бизнес-логика, уже который проект. И нужны данные, не поверите, именно за последние несколько секунд, а не за месяц/год. И данные легко помещаются в оперативную память одного сервера. Впрочем, если добавить всю бизнес-логику, то, думаю, все равно Java будет быстрее (когда появляются динамические фильтры, сложные зависимости между элементами, введенные пользователем формулы, пара десятков настроек и т.п.). Зачем мне результаты искуственных тестов, к тому же изначально заточенных на SQL? Меня реальные задачи интересуют. Давай уж вернемся к исходной задаче - есть большой внешний поток данных, которые нужно привести к удобному виду, собрать статистику и эту статистику куда-нибудь выложить. Антон сообщит пяток статистик, которые занимают наибольшее время в его системе и пяток - с наименьшим. И посмотрим. С парой сотен крупных файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 00:49 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Давайте идти от простого к сложному. Сначала разберёмся с этим примером, посмотрим на цифры. А потом начнём с обеих сторон предлагать усложнения ТЗ, призванные подчеркнуть преимущества одной либо другой технологии. Да, по поводу кода. Там мы просто откроем курсор на TESTBIG и внутри сохраняем сумму в TESTTOTALS. Как VoDA проснётся (а у него уже ночь наступила наверняка), он запостит свой код. Потом я свой. От этого и начнём плясать. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 00:50 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton DemidovВы отвлекаетесь от основной задачи этого тестирования - сравнить скорость PL/SQL и Java. Тогда задача должна быть другая. Например, матрицы перемножить 100*100 - это если арифметику измерять. Или какой-нибудь парсинг - для сравнения скорости обработки строк. По мне - лучше всего интерпретатор выражений (например, паскалевского - оно проще). С парой десятков собственных функций. И какую-нибудь сложную функцию посчитать по сотне тысяч значений (это ближе всего к скорости обработки бизнес-логики). Решение на чистом SQL будет дано здесь, но только вне конкурса. Мы все (я надеюсь) прекрасно понимаем, что оно будет быстрее всех. Конечно. Это именно та задача, на которую и рассчитаны SQL сервера. Другое дело, что в реальной жизни подобных запросов - меньшинство, увы. А обычно, если все делать в SQL, получаются десятки и сотни запросов по несколько страниц, сотни таблиц и т.д. Очевидно, что чем дальше мы отходим от реляционных задач (это к вашей "фазе луны"), тем выгоднее использовать универсальные ЯП типа С или Явы. С другой стороны, чем больше данных вам надо перебрать (это я по поводу таблицы на пол милиарда записей, предложенной Yo.! ), тем "ближе" надо находится к БД для уменьшения издержек на пересылку данных. Кто бы спорил ;) Поэтому и приходится каждый раз решать задачу, как разделить задачу между БД, сервером приложений, Web-сервером и прочими компонентами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 01:36 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Вы, имхо, вообще уже давно не спорите, а каждый на свой манер соглашаетесь :) Anton Demidov уже подытожил в каком случае что и к чему склоняется. Если вы собрались тестами выявлять эти тенденции количественно - имхо, за годик разнообразного тестирования и будут какие-то показательные результаты, но не раньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 09:40 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton DemidovИзвините, забыл команды сбора статистики во избежание недоразумений Код: plaintext 1. 2. 3. 4. У меня: Oracle XE 10.2.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 10:39 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
VoDAПривет! что-то это у меня не запускается. На какой версии Oracle gather_table_stats работает? какой смысл применения этой команды? У меня: Oracle XE 10.2.0 статистику обновляет (на всякий случай в данном случае), в XE точно есть, пользователя в кавычках попробуй указать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 10:53 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton DemidovИменно это я и хотел показать: три тайминга для реализации на чистом SQL реализации на PL/SQL реализации на Java Помнишь, тут кто-то засомневался в истинности заявлений Тома Кайта, что именно этот порядок отражает скорость обработки данных? Я сейчас готовлю скрипты для теста. Код: plaintext 1. После прочтения Кайта я понял, что эти тайминги написаны для скорости работы всего ВНУТРИ Oracle. Говоря же про Java я имею в виду использование Java для обработки данных И JavaСУБД стартует внутри АппСервера. Таких таймингов у Кайта нет, хотя с его описанием и объяснениями я согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 10:59 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton Demidov Задача программистам на Яве - заполнить TESTTOTALS суммой ORDER_AMOUNT из TESTBIG. P.S. Я тут особо не заморачивался - если есть желание что-то усложнить - предложения в студию. Предложение: заменить NUMBER на int для большей совместимости типов. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 11:02 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton DemidovВы отвлекаетесь от основной задачи этого тестирования - сравнить скорость PL/SQL и Java. Решение на чистом SQL будет дано здесь, но только вне конкурса. Мы все (я надеюсь) прекрасно понимаем, что оно будет быстрее всех. Очевидно, что чем дальше мы отходим от реляционных задач (это к вашей "фазе луны"), тем выгоднее использовать универсальные ЯП типа С или Явы. С другой стороны, чем больше данных вам надо перебрать (это я по поводу таблицы на пол милиарда записей, предложенной Yo.! ), тем "ближе" надо находится к БД для уменьшения издержек на пересылку данных. Код: plaintext 1. В то, что Oracle через SQL обработает данные быстрее чем Апп Сервер тягающий данные из этой СУБД никто не сомневается. Изначальное описание здесь Задача обработать входящие данные. Для упрощения задачи: 1. данные - это нечто вида CLIENT int not null, ORDER_ID int not null, ORDER_AMOUNT int not null (кстати а ORDER_AMOUNT может быть отрицательным). Внутренний формат задан жестко. 2. Входные данные поступают в виде CSV файла разделенного \',\' с переводом строки. Важно, что формат не подходит для bulk-insert операции. Сам формат может меняться, потому данные перед употребление нужно парсить. 3. Файл сжат ZIP алгоритмом. Важно, что алгоритм сжатия может меняться, потому система должна иметь возможность изменить его. 4. Строк в файле ~ 1 000 000. Нужно получить три клиента с самой большой суммой ORDER_AMOUNT, три клиента с самам большим количеством изменений ORDER_AMOUNT (больше всего записей в файле) и три клиента имеющие самый большой средний по ORDER_AMOUNT. Результат тупо выводится на экран. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 11:57 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton Demidov Да, по поводу кода. Там мы просто откроем курсор на TESTBIG и внутри сохраняем сумму в TESTTOTALS. Как VoDA проснётся (а у него уже ночь наступила наверняка), он запостит свой код. Потом я свой. От этого и начнём плясать.Проснулся Код: Код: plaintext 1. 2. 3. СУБД - Apache Derby. Все работает внутри моего приложения и исключительно на Java ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 12:08 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
DPHУвы, а у меня именно такого типа бизнес-логика, уже который проект. И нужны данные, не поверите, именно за последние несколько секунд, а не за месяц/год. И данные легко помещаются в оперативную память одного сервера. Впрочем, если добавить всю бизнес-логику, то, думаю, все равно Java будет быстрее (когда появляются динамические фильтры, сложные зависимости между элементами, введенные пользователем формулы, пара десятков настроек и т.п.). ну специальность у вас узкая. небойсь че нибудь типа ИИ для форекса, все таки задач которые насилуют субд гораздо больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 12:22 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Yo.!у меня такое предложение. сгенерить побольше табличку, чтоб она гарантирована сильно не влезла бы в память, миллионов на 500 записей, там одно поле телефона. задача распарсить тучу вариантов написания номера телефона и разложить код страны и очищеный номер по разным полям. не знаю умеет ли db2 regexp в SQL, но можно 2 варианта проверить - с regexp в SQL и с запретом на использования regexp. вот тут на апп-сервер и замерим, как ему понравится тягать гигобайты в свою память. это Вы типа предлагаете поодной записи за проход парсить за пределами базы? Ну хорошо, если так хочется то можно... почему и нет :) может тогда еще туда добавить пару полей типа: когда, кто и сколько позвонил, и потом посчитать звонки каким-нибуть тарификами :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 13:27 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
mq может тогда еще туда добавить пару полей типа: когда, кто и сколько позвонил, и потом посчитать звонки каким-нибуть тарификами :) Ага. В качестве карты тарифов взять какой-нибудь реальный Билайн - с корпоративными фенечками и разделением звонков по разным тарифам ;) А потом добавить еще два новых тарифа и сравнить, кто быстрее реализовал ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 13:38 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
DPH Ага. В качестве карты тарифов взять какой-нибудь реальный Билайн - с корпоративными фенечками и разделением звонков по разным тарифам ;) А потом добавить еще два новых тарифа и сравнить, кто быстрее реализовал ;) я за. +378 12345678 (378) 12345678 00 378 12345678 00378 123 45678 моб. +378123 45678 тел. +378 123 456 78 (378)1234-5678 и их варианты SQL-ем без regexp так запросто вроде не распарсить. VoDA Для упрощения задачи: 1. данные - это нечто вида CLIENT int not null, ORDER_ID int not null, ORDER_AMOUNT int not null (кстати а ORDER_AMOUNT может быть отрицательным). Внутренний формат задан жестко. 2. Входные данные поступают в виде CSV файла разделенного ',' с переводом строки. Важно, что формат не подходит для bulk-insert операции. Сам формат может меняться, потому данные перед употребление нужно парсить. 3. Файл сжат ZIP алгоритмом. Важно, что алгоритм сжатия может меняться, потому система должна иметь возможность изменить его. 4. Строк в файле ~ 1 000 000. Нужно получить три клиента с самой большой суммой ORDER_AMOUNT, три клиента с самам большим количеством изменений ORDER_AMOUNT (больше всего записей в файле) и три клиента имеющие самый большой средний по ORDER_AMOUNT. не догнал что мы тут померим, в оракле это gunzip | sql*loader c правилами парсинга и пара SQL команд ... до pl/sql дело и не дойдет ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 13:49 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton DemidovВы отвлекаетесь от основной задачи этого тестирования - сравнить скорость PL/SQL и Java. Решение на чистом SQL будет дано здесь, но только вне конкурса. Мы все (я надеюсь) прекрасно понимаем, что оно будет быстрее всех. Очевидно, что чем дальше мы отходим от реляционных задач (это к вашей "фазе луны"), тем выгоднее использовать универсальные ЯП типа С или Явы. С другой стороны, чем больше данных вам надо перебрать (это я по поводу таблицы на пол милиарда записей, предложенной Yo.! ), тем "ближе" надо находится к БД для уменьшения издержек на пересылку данных. в данном примере, можно компенсировать издержки на <"ближе" надо находится к БД "> threads в Java, другими словами, можно тупо создать thread per client, и подсчитать сумму... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 13:52 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Yo.! +378 12345678 (378) 12345678 00 378 12345678 00378 123 45678 моб. +378123 45678 тел. +378 123 456 78 (378)1234-5678 и их варианты SQL-ем без regexp так запросто вроде не распарсить. Когда у вас будут 500 млн. записей, думаю, что Вы найдете другой способ, как это реализовать более оптимально. Хотя кто знает... :) Это все равно что сортировать данные пузырьком или quicksort, результат тотже, а реализация другая :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 16:56 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Yo.!Ага. В качестве карты тарифов взять какой-нибудь реальный Билайн - с корпоративными фенечками и разделением звонков по разным тарифам ;) и их варианты SQL-ем без regexp так запросто вроде не распарсить. Эту хрень НИЧЕМ так просто не распарсить. Причем сотовые - случай в телефонии самый простой, разве что данных много. Лет так несколько назад сделали мы биллинг стационарной телефонии и инет. Так там мало того, что записей десятки миллионов в каждом файле, мало того что записи с разных коммутаторов в сети в разных форматах, так еще один и тот же звонок гуляет по коммутаторам внутри сети с разным временем регистрации, бывают дубликаты, да еще сверка с коммутаторами партнеров, которые черте-че присылают... В результате после долгих мыканий пришлось писать свой многопоточный парсер на C++ со сложным хешем в памяти и многокритериальным нечетким поиском, а уже его весьма обработанный под одну гребенку результат быстрым load'ом пихать в DB2, где и крутить статистику и т.д. Разработка заняла 2 года, причем не с нуля. А тарифы с кучей условий, *** маркетологами напридуманные... А аналитика с рекомендациями по маршрутизации... Вобщем, не совсем для тестирования задача :) ИМХО как раз правильный пример того, что не все на СУБД делать надо - важна именно максимальная скорость обмолота нереляционных изначально данных, а она только компиляторами и только in-memory достигается, тем более что при парсинге надежность, логи и т.д. не нужны. СУБД очень нужен, но уже потом. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 17:30 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
VoDAПредложение: заменить NUMBER на int для большей совместимости типов.Если хотите - меняйте. Для Оракла это NUMBER с запретом иметь дробную часть - т.е. внутреннее представление не меняется. VoDA Код: Код: plaintext 1. 2. 3. А если запись с клиентом уже есть?! Любой тест гоняется по несколько раз для получения "правильного" тайминга. Этот код "свалится" по Primary Key Violation при втором прогоне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 19:59 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Favn +1 Классический этап подготовки и загрузки данных в хранилище для последующего анализа Я вообще не сильно понимаю зачем этот спор в таком виде по производительности затеяли. Каждой технологии свое место, свои алгоритмы. Как тут сказал Yo, что мерим то? Скорость выборки данных - СУБД быстрее, скорость обработки структурированных выбранных данных(типа пересчета остатков) - СУБД быстрее. Тут зачем что-то обсуждать, для этого СУБД придумали. А вот скорость обработки выбранных неструктурированных данных - тут можно разные технологии применять. Если обработка простая - можно и на SQL обработать. Cложная - используйте сторонние инструмены и технологии. Только выборку данных для этих инструментов оставьте базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 20:03 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Я бы еще добавил по началу темы. Бизнес-логику обработки подготовленных структурированных данных эффективнее реализовать внутри БД. Конечно при грамотном проектировании самой СУБД. Но это далеко не бизнес-логика всего приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 20:23 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Мой тестовый код на PL/SQL. Специальная версия, чтобы минимально использовать БД и максимально нагрузить PL/SQL. Я преднамеренно не использую MERGE и SUM/GROUP BY Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. Что-то я с объёмами не расчитал - всего две секунды у меня это исполняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2008, 21:24 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Favn Yo.!Ага. В качестве карты тарифов взять какой-нибудь реальный Билайн - с корпоративными фенечками и разделением звонков по разным тарифам ;) и их варианты SQL-ем без regexp так запросто вроде не распарсить. Эту хрень НИЧЕМ так просто не распарсить. как раз регэкспом это делается элементарно Код: plaintext 1. да ... ступил, через translate и substr наверно тоже простенький SQL получится, наверно действительно еще картой тарифа придется усложнять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 14:11 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Yo.!как раз регэкспом это делается элементарноВ таком виде - элементарно чем угодно. Я о том, что в настоящем логе со "взрослого" тел. коммутатора запись мягко говоря не соотсветствует самому факту звонка, связь может быть многие ко многим, да еще и с дубликатами и неверной информацией. Не говоря уже о тарифах... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 14:26 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Возьмите обычный оракловский swingbench. Там есть два теста типа TPC-C для "ввода и обработки заказов"- plsql и чисто java. Первый вызывает процедуры, второй - только sql через java-программу. Объем начальных данных и количество "пользователей" спокойно настраиваются. Еще и результат по типам транзакций получите. Взять можно на www.dominicgiles.com. Работает и на линуксе/юниксе, и на винде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 22:36 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton DemidovМой тестовый код на PL/SQL. Специальная версия, чтобы минимально использовать БД и максимально нагрузить PL/SQL. Я преднамеренно не использую MERGE и SUM/GROUP BY Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Что-то я с объёмами не расчитал - всего две секунды у меня это исполняется.А через что можно запустить тестовый пример? Пробовал через APEX => SQL Commands => script, получаю ORA-00922: missing or invalid option ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2008, 15:54 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
FavnВ таком виде - элементарно чем угодно. Я о том, что в настоящем логе со "взрослого" тел. коммутатора запись мягко говоря не соотсветствует самому факту звонка, связь может быть многие ко многим, да еще и с дубликатами и неверной информацией. Не говоря уже о тарифах... 1. вы разберитесь кого цитируете и на что отвечаете. 2. коммутаторы меня мало интересуют, меня интересует простенькая задача не решаемая голым SQL. 2VoDA set term off - это команда sqlplus, без нее пробуй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2008, 16:27 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Yo.!2VoDA set term off - это команда sqlplus, без нее пробуй.Ок спасибо, загрузил через sqlplus чтобы не париться. Итого результаты Java/JavaDB vs plSQL/Oracle : Скорость: к сожалению скорость Java-procedure внутри JavaDB оказалась достаточно низкая, хотя возможно не учтены какие то дополнительные факторы влияющие на производительность. Скорость обработки Oracle 1,4-1,8 с, JavaDB 10-12 с. Синтаксис: на Java код получается больше из-за отсутствия поддержки встроенного в язык SQL (есть SQLJ для Oracle, но возможности его использования для меня туманны). В Java приходится писать больше кода для того же результата (SQLJ не рассматривался) Вместо Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. Объем ПЗУ требуемый под БД не засекался. Объем потребляемой памяти - преимущество за Java (хотя Oracle & Java не оптимизировались под уменьшение потребления памяти и CPU) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2008, 17:59 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Общие примечания. Спасибо Anton Demidov -у и другим участникам дискуссии за участие ;) После проведения ряда тестов и опираясь на предыдущий опыт работы как DB-developer-а пришел к выводам: Для обработки большого потока реляционных данных придется пользоваться процедурными расширениями SQL (PL/SQL от Oracle). Использовать Derby стоит на малых объемах (до 100 Мб). При превышении объема производительнее использовать локально установленную СУБД и крутить данные хранимками. Пока нет возможности совместить переносимость между СУБД и скорость обработки данных. Все вышеуказанное ИМХО!!! ---- - Just Do IT! (c) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2008, 18:11 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Честно говоря, я не очень в курсе с предыдущим диалогом. Сравнение идет для Java и PL/SQL при работе с одной БД Oracle или для двух СУБД Java DB (Derby) и Oracle? Похоже, изначально, речь шла о первом случае, но стараниями DPH вопрос ушел куда-то в сторону. Могу помочь ему не уходить очень далеко. То есть, чтобы Java не уступила PL/SQL, достаточно всего лишь вызывать PL/SQL из Java используя JDBC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2008, 13:04 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
VoDA Скорость: к сожалению скорость Java-procedure внутри JavaDB оказалась достаточно низкая, хотя возможно не учтены какие то дополнительные факторы влияющие на производительность. Скорость обработки Oracle 1,4-1,8 с, JavaDB 10-12 с. У JavaDB провал на insert/update, выборку делает быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2008, 13:11 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Кстати, о телефонах: Пришел полный номер телефона, нужно определить страну. Где это нухно делать, в программе или в базе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2008, 22:20 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Vurn VoDA Скорость: к сожалению скорость Java-procedure внутри JavaDB оказалась достаточно низкая, хотя возможно не учтены какие то дополнительные факторы влияющие на производительность. Скорость обработки Oracle 1,4-1,8 с, JavaDB 10-12 с. У JavaDB провал на insert/update, выборку делает быстро.ХЗ мне нужно было получить общую скорость работы. Оказалось, что общая скорость хромает. Отписался разрабам Derby / JavaDB. ничего особо придумать не смогли. Проверял и апдейт версии и апдейт JRE. Смог дотянуть только до 9,5 сек. У других еще хуже - рассмотрел h2database (разработывают ее разработчики hipersonic, которую вроде забросили). Так вот хранимка на h2 выдала 15 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2008, 11:25 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
drevКстати, о телефонах: Пришел полный номер телефона, нужно определить страну. Где это нухно делать, в программе или в базе?Зависит от объема данных и сложности обработки. Чем больше нужна скорость тем больше перевес в сторону обработки на СУБД. Чем больше сложность одной операции разбора, тем больше перевес на стороне приложение, ибо его проще дебажить разрабатывать и есть большое количество библиотек которые можно использовать в приложении. Если и сложность мала и данных мало, то все рано, но я бы рекомендовал на СУБД. ИМХО. Если данных много и сложность разбора велика, то нужно выбирать ИЛИ быстро разработать, но медленно ехать, ИЛИ долго пишем и отлаживаем, но быстро работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2008, 11:26 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
VoDA drevКстати, о телефонах: Пришел полный номер телефона, нужно определить страну. Где это нухно делать, в программе или в базе?Зависит от объема данных и сложности обработки. Чем больше нужна скорость тем больше перевес в сторону обработки на СУБД. Чем больше сложность одной операции разбора, тем больше перевес на стороне приложение, ибо его проще дебажить разрабатывать и есть большое количество библиотек которые можно использовать в приложении. Если и сложность мала и данных мало, то все рано, но я бы рекомендовал на СУБД. ИМХО. Если данных много и сложность разбора велика, то нужно выбирать ИЛИ быстро разработать, но медленно ехать, ИЛИ долго пишем и отлаживаем, но быстро работает. Нет там никакой обработки. Просто достаточно большие таблицы (иногда нужны первые 6 знаков). Причем - изменяемые. ИМХО, только запрос к базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2008, 12:25 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
drevПросто достаточно большие таблицы (иногда нужны первые 6 знаков). Причем - изменяемые. ИМХО, только запрос к базе. ИМХО таки зависит от ситуации. Если, предположим, железяка должна в течение гарантированного времени получить ответ - устанавливать такое соединение или рвать - то эту функцию лучше вынести поближе к входу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2008, 13:47 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
drevНет там никакой обработки. Просто достаточно большие таблицы (иногда нужны первые 6 знаков). Причем - изменяемые. ИМХО, только запрос к базе.Зависит от формата: Питер может быть набран как: +7-812, +7812, 7812, 8812, 8-812. А еще в данных могут быть ошибки и мусор типа %7+812, 88*1/2 8*81+2. Бывают ситуации когда анализ простой алгоритмически, но отсев мусора требует дополнительных действий. softwarer прав в том, что решение строится под задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2008, 15:14 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
softwarer drevПросто достаточно большие таблицы (иногда нужны первые 6 знаков). Причем - изменяемые. ИМХО, только запрос к базе. ИМХО таки зависит от ситуации. Если, предположим, железяка должна в течение гарантированного времени получить ответ - устанавливать такое соединение или рвать - то эту функцию лучше вынести поближе к входу. Некоторые телекоммуникационные компании, например, Cisco, считают иначе. IP-телефония обычно реализована с помощью СУБД. Кстати, Вы верно указали ситуацию. Программа, которая использовала для этой проверки СУБД (SQL Server) была первой, и долгое время единственной прошедшей Cisco стресс-тест сертификацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2008, 09:47 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton DemidovМой тестовый код на PL/SQL. Специальная версия, чтобы минимально использовать БД и максимально нагрузить PL/SQL. Я преднамеренно не использую MERGE и SUM/GROUP BY Код: plaintext 1. 2. 3. 4. Где доказательства того, что этот код грузит PL/SQL машину (т.е. время, затраченное на SQL хотя бы сопоставимо со временем работы PL/SQL), а не SQL? Я в принципе не вижу здесь ничего алгоритмического. Сплошной сиквел + маааленькая часть PL-я. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2008, 17:15 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
TimmЯ в принципе не вижу здесь ничего алгоритмического. Сплошной сиквел + маааленькая часть PL-я. " Сплошной сиквел " - это решение данной задачи при помощи одной команды MERGE. Здесь же я преднамеренно использовал Оракл как DBF файл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2008, 00:27 |
|
||
|
Сравнение производительность обработки Oracle & Java
|
|||
|---|---|---|---|
|
#18+
Anton Demidov TimmЯ в принципе не вижу здесь ничего алгоритмического. Сплошной сиквел + маааленькая часть PL-я. " Сплошной сиквел " - это решение данной задачи при помощи одной команды MERGE. Здесь же я преднамеренно использовал Оракл как DBF файл Не, я о другом. Какой смысл в этой процедуре? она использует сиквел. много. Так нахрена сравнивать PL/SQL с Java, если PL ничего не делает? PS. в моем понимании цель топика - сравнить скорость PL/SQL и external Java. Так давайте сравнивать именно их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2008, 14:05 |
|
||
|
|

start [/forum/topic.php?all=1&fid=35&tid=1553089]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 395ms |

| 0 / 0 |
