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

StackOverflow https://stackoverflow.com/questions/520595

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top