2017-02-14 2 views
0

Фон: Я немного поглядел на Кэширование весной, и это похоже на отличный способ сэкономить время для обычных операций чтения. В моем коде в настоящее время есть цикл над большим количеством элементов, где я выполняю логику, чтобы проверить, связаны ли некоторые другие объекты с помощью обычных элементов. Способ думать об этом похож на связанные с магазином веб-сайты, отображаемые при просмотре определенного элемента. Значения, которые я использую для определения этого, являются сложными, но это основная идея.«Кэширование» Альтернативы по интенсивным вычислениям процесса

При загрузке страницы товара очень длительное время загрузки, чтобы вычислить и выяснить, какие другие элементы связаны каким-либо образом, чтобы отображать ссылки на них. Вместо того, чтобы вычислять этот список каждый раз, когда загружается страница элемента, я начал «кэшировать» элементы со списком своих рекомендуемых элементов. Многие вещи в системе может вызвать необходимость произвести перерасчет этих отношений: добавление/удаление свойств элементов, добавление/удаление элементов и т.д.

Проблема: Мой «кэш» это просто единичный объект, содержащий карту для элементов и связанные с ними объекты. Процесс итерации через каждый элемент системы, когда требуется какое-либо изменение в кеше, требует много времени и требует интенсивного процесса. Java Cache не кажется правильным ответом из-за постоянных изменений в элементах. Есть ли какие-либо другие шаблоны дизайна, которые я рассматриваю для этого дизайна? Кэши кажутся близкими, но я не уверен, что эта проблема вписывается в форму кеширования, из-за чего она немного сложнее, чем объемный объем чтения одного элемента.

Являются ли кэши способом для этого? Если кеширование не является правильным решением, что такое?

+0

Я мог ошибаться, но это пахнет скорее как проблема, в которой вы должны найти наиболее эффективный способ * моделировать свои объекты с помощью * структуры данных *, которая лучше всего подходит для таких проблем. Кэш - это то место, где ссылки будут идти в конечном итоге, но структура, в которой хранятся данные, должна быть правильно рассмотрена. – CKing

+0

Я согласен с @CKing. У вас, похоже, проблема, потому что у вас есть только один физический объект ('Item'), и у вас есть логическая сущность' ItemRelation' (с свойством type и всем остальным). Поскольку в данных 'ItemRelation' существует такая большая потребность, почему бы не материализовать отношения как физический объект, который будет храниться на похожих носителях, ваши предметы сохранены? Таким образом, вы можете сэкономить проблемы, вычислив отношения только тогда, когда произойдут какие-то изменения, и остальное время, которое вы только что прочитали, доступно в отношениях datastorage. –

+0

@CKing @ m-prokhorov Я попробую и сохраню его общий: 'Item' имеет' Set '. «Свойство» отслеживает более или менее пару ключ/значение, рассматривая строки типа «Цвет: синий», где «Цвет» - это «Атрибут», а «Синий» - значение «Значение». «Атрибут» и «Значение» существуют сами по себе (сложная БД сложна), поэтому все связано. Я только обновляю этот «кеш», когда материал меняется, но проблема в том, что он все еще перебирает каждый «элемент» в системе, чтобы перепроверить его «Свойство», чтобы увидеть, влияет ли новое изменение на «кеш» (добавить/удалить/что угодно). 'Свойство' держит ручки для' Item' & others. – Walls

ответ

0

Кажется, что кеши не являются решением проблемы, но они могут помочь вам в решении проблемы.

Например, вместо кэширования созданных объектов другой подход заключается в кешировании информации, которая редко изменяется, но имеет решающее значение для создания списков.

Кэширование на основе функции Spring (то есть @Cachable) может пригодиться либо для кэширования, либо для недействительности.

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

Смежные вопросы