Мемоизация в базе данных - хорошая идея? Есть опыт?
У меня есть идея, которую я еще не реализовал, потому что у меня есть некоторый страх, что я, возможно, лаю не на том дереве... главным образом потому, что поиск в Google по этой теме дает очень мало результатов.
В основном у меня есть несколько медленных SQL-запросов, в значительной степени потому, что они имеют подзапросы, которые отнимают много времени. Например, они могут делать такие вещи, как "подсчитать все велосипеды красного цвета, на которых ездят мальчики в возрасте от 10 до 15 лет". Это дорого, так как оно проходит через все велосипеды, но конечным результатом является одно число. И, в моем случае, мне не нужно, чтобы это число было на 100% актуальным.
Похоже, что окончательным решением проблем такого рода является применение механизма на основе OLAP для предварительного кэширования этих перестановок. Однако в моем случае я на самом деле не пытаюсь нарезать и разбивать данные на тонны метрик, и я бы не хотел усложнять мою архитектуру еще одним запущенным процессом / хранилищем данных.
Итак... моя идея была в основном запоминать эти подзапросы в базе данных. У меня может быть таблица с именем "BicycleStatistics", и она может хранить выходные данные этого подзапроса как пару значений и входов и выходов.
Имя бывшего: "c_red_g_male_a_10-15" значение: 235
И есть механизм, который запоминает эти значения в этой таблице при выполнении запросов.
Кто-нибудь был в такой ситуации и пробовал что-нибудь подобное? Причина, по которой я думаю, что подобное решение является ценным из-за того, что "бросьте много ОЗУ в вашу БД и дайте базе данных справиться с этим", заключается в том, что (A) моя база данных больше, чем объем ОЗУ, который я могу удобно использовать для этого, и (Б) база данных гарантирует, что я получу точное число для этой статистики, и мой большой выигрыш в том, что я в порядке с числами, которые устаревают на день или два.
Спасибо за любые мысли / отзывы.
Том
1 ответ
Материализованные представления являются способом выполнения этого требования, если ваша СУБД их поддерживает.