Улучшения производительности в приложении Java

Это скорее вопрос дизайна / архитектуры, хотя он также легко может найти свое отражение в коде. Какая методология является наилучшей при улучшении производительности приложения Java, развернутого на сервере приложений, которое обращается к базе данных для получения записей?

Повысьте производительность на уровне базы данных, настроив SQL, ORM, любую другую форму настройки ИЛИ в коде Java, выбирая лучшие коллекции на основе данных, настраивая код и т. Д.

В одном из реальных сценариев у меня было требование проанализировать некоторые данные из большого двоичного объекта в поисках некоторых атрибутов.

Один из вариантов заключался в том, чтобы получить все данные из дБ и перебрать список в поисках определенных атрибутов, тем самым фильтруя записи;

Другой вариант - ограничить данные из БД с помощью сложных запросов / хранимых процедур и построить REG Ex с использованием функций Oracle для BLOB.

Хотел бы узнать несколько практических указателей из реальных проблем. Здесь мы говорим о миллионах строк данных, о которых я говорю. Я действительно прибегал к фильтрации с использованием уровня БД, но до сих пор плохо тестировал очень большие наборы данных.

Изменить:

Вопрос прост: это приложение / модуль имеет внешний интерфейс и серверную часть, которые общаются с Oracle. Необходимо получить и отфильтровать данные из большого двоичного объекта, содержащего сериализованный объект Java. Что эффективнее?

Разбор BLOB с помощью функции RAW и построение регулярных выражений (которые могут завершиться ошибкой из-за изменения данных в BLOB) ИЛИ получить данные через JDBC (API строится поверх некоторого уровня сохраняемости с использованием спящего режима), а затем фильтровать его на уровне Java.

Это реальная проблема с работающим приложением. Я даже поговорил с администратором баз данных, и мне предложили фильтровать его на уровне Java.

Справочные вопросы:

Как избежать необработанной переменной ошибка слишком длинная длина в SQL Developer?

Как получить текстовое содержимое из BLOB в Oracle SQL


person Rockoder    schedule 16.12.2015    source источник
comment
Я разместил вопросы, так как столкнулся с этим фактическим сценарием. Я не уверен, как еще я мог сделать вопрос законным, чтобы получить содержательные ответы. Я видел гораздо более широкие вопросы, чем этот.   -  person Rockoder    schedule 21.12.2015
comment
Для тех, кто проголосовал против. Сегодня я думал над вопросом и нашел похожий вопрос, очень похожий на то, что я имел в виду. проголосовали против, и на самом деле на этот вопрос есть около 566 ответов.   -  person Rockoder    schedule 22.12.2015
comment
Лучший способ использовать базу данных - переместить атрибуты, по которым выполняется поиск, в столбцы. На самом деле, вы должны избавиться от блоба и переместить как можно больше столбцов, а затем использовать JPA. Затем добавьте индексы к полям в базе данных и используйте QueryDSL для написания хороших запросов на java.   -  person KarlP    schedule 18.06.2016


Ответы (1)


Буквально сегодня я пытался найти ускорение в написанном мною приложении. Как и у вас, у меня были предварительные предположения об источниках медлительности.

В частности, я предполагал, что приложение связано с вводом-выводом, поэтому мало что можно было сделать. Я ошибался.

Я использовал метод, который я всегда использую, и обнаружил, что только около 40% времени было в Ввод / вывод. Остальные 60% можно было улучшить, что привело к ускорению примерно в два раза, после чего фактически было ограничено вводом-выводом.

Что взять? Нет ничего плохого в том, чтобы заранее догадаться, что нужно исправить. Верить им - только вред.

person Mike Dunlavey    schedule 16.12.2015