В настоящее время мне поручено исправить кеш для системы, подобной электронной коммерции, цены на которую зависят от многих факторов.Бэкэнд кеша переделан.Для данного продукта факторы, влияющие на цену:
sku
канал
подканал
план
дата
В настоящее время кэш структурирован следующим образом:
product1_channel1_subchannel1: {sku_1: {plan1: {2019-03-18: 2000}}}
API обслуживает запросы на несколько продуктов, skus и все вышеперечисленные факторы.Поэтому они решили запросить все данные на уровне product_channel_subchannel и отфильтровать данные в приложении, что очень медленно.Также они решили, что при промахе кеша они построят кеш для всего скуса на 90 дней данных.Таким образом, только один запрос будет встречен гневом, в то время как другие получат выгоду от него (только подвох в том, что мы чаще используем кеш, который также приводит к снижению производительности системы)
Недостаток использования всех этих факторовв ключах будет слишком много ключей.На бал-парк есть 400 продуктов, каждый из которых состоит из 20 скусов с 20 каналами, 200 подканалов, 3 типа планов и 400 дней цен.Чтобы избежать этих многочисленных ключей в каком-то месте, мы должны сгруппировать данные.
Система в настоящее время получает около 10 об / с и должна ответить в течение 100 мс.
Вопрос:
Хорошо ли описанная выше структура кэша?Или как нам сгладить эту структуру?
Как кэши хранятся в системах ценообразования в целом.Я чувствую, что это очень тривиальная задача, тем не менее, мне очень трудно обосновать свои подходы
Можно ли пожертвовать одним запросом, чтобы нагреть кеш для большой части данных?Или лучше иметь стратегию разогрева кеша?