Мемоизация в базе данных - хорошая идея? Есть опыт? - PullRequest
2 голосов
/ 17 февраля 2010

У меня есть идея, которую я еще не претворил в жизнь, потому что у меня есть некоторый страх, что я, возможно, лаю не на том дереве ... в основном потому, что поиск в Google по этой теме дает так мало результатов.

По сути, у меня есть несколько медленных запросов SQL, в значительной степени потому, что они имеют подзапросы, которые отнимают много времени. Например, они могут делать такие вещи, как «подсчитать все велосипеды красного цвета, на которых ездят мальчики в возрасте от 10 до 15 лет». Это дорого, так как оно проходит через все велосипеды, но конечным результатом является одно число. И, в моем случае, мне не нужно, чтобы это число было на 100% актуальным.

Похоже, что окончательным решением проблем такого рода является применение механизма на основе OLAP для предварительного кэширования этих перестановок. Однако в моем случае я на самом деле не пытаюсь нарезать и разбивать данные на тонны метрик, и я бы не хотел усложнять мою архитектуру еще одним запущенным процессом / хранилищем данных.

Итак ... моя идея заключалась в запоминании этих подзапросов в базе данных. У меня может быть таблица с именем «BicycleStatistics», и она может хранить выходные данные этого подзапроса в виде пары «имя-значение» его входов и выходов.

Имя ex: "c_red_g_male_a_10-15" значение: 235

И есть механизм, который запоминает эти значения в этой таблице при выполнении запросов.

Кто-нибудь был в такой ситуации и пробовал что-нибудь подобное? Причина, по которой я думаю, что подобное решение является ценным из-за того, что «бросьте много ОЗУ в вашу БД и дайте базе данных справиться с этим», заключается в том, что (А) моя база данных больше, чем объем ОЗУ, который я могу удобно использовать для этого, и ( Б) база данных будет гарантировать, что я получу точное число для этой статистики, и мой большой выигрыш в том, что я в порядке с числами, которые устаревают на день или два.

Спасибо за любые мысли / отзывы.

Tom

1 Ответ

2 голосов
/ 18 февраля 2010

Материализованные представления являются способом выполнения этого требования, если ваша СУБД их поддерживает.

...