Что следует учитывать при использовании подвыборов в запросах с сильно загруженными базами данных? - PullRequest
1 голос
/ 06 февраля 2009

Мы разрабатываем приложение с постоянным уровнем, используя OpenJPA1.1 и базу данных Oracle в качестве внутреннего хранилища. Я буду использовать запросы с подвыборами (см. Мой вопрос на Решение JPA-запроса с поиском последней записи в списке подключенных ).

Теперь мои коллеги по работе отмечают, что такие запросы могут привести к проблемам с производительностью, поскольку база данных заполнена тысячами дат клиентов, которые используются несколькими тысячами одновременно работающих пользователей (что станет реальностью в производстве).

Итак, мой вопрос: существует ли «наилучшая практика» , использующая subselects в запросах при таких обстоятельствах? И что нужно учитывать при этом?

1 Ответ

1 голос
/ 06 февраля 2009

Сначала я докажу, что это проблема. Вы захотите загрузить базу данных фиктивными данными и посмотреть, как ваши запросы будут работать по мере увеличения базы данных. В противном случае вы тратите время на оптимизацию чего-то, что не может быть проблемой.

Надо подумать. Во всех местах, где я работал, где все рушится, это не тысячи записей, а миллионы. У вас есть эта система, и она некоторое время работает нормально, а затем начинает замедляться, даже если вы добавляете больше оборудования. Место, где я сейчас работаю, насчитывает около 70 миллионов записей в его таблице истории, начиная с 1998 года. В результате производительность по некоторым запросам ужасна, и они тратят много времени на решение этих проблем.

Но в какой-то момент вы действительно должны спросить. Нужно ли нам хранить данные более 4 лет в нашей транзакционной системе? Или даже 4 месяца? Этот срок зависит от потребностей вашего бизнеса, но если вы сохраните в своей транзакционной системе только те данные, которые необходимы для обработки текущей работы ... и заархивируете в хранилище данных свои исторические записи. Вы улучшите свою общую производительность, потому что, скорее всего, вам нужно лишь время от времени запрашивать эти старые данные, так зачем сохранять их с вашими последними данными?

Если вы подумаете об этом заранее, вы сэкономите много головных болей в долгосрочной перспективе.

...