Прежде чем вы остановитесь на структуре в памяти, подумайте, что происходит, когда ваш сервер должен перезагрузиться.Эта структура в памяти исчезнет.Если все в порядке, вы должны использовать структуру в памяти.Если это не так, вы можете рассмотреть возможность использования отдельного объекта домена для обработки метаданных такого типа.
In-Memory
Потоки процессора Apache не разделяютпамяти, поэтому лучший способ сделать это, вероятно, установить что-то вроде memcached .Каждый раз, когда вы хотите получить текущие предметы, вы звоните на определенный ключ («topforty»).Memcached остается постоянным, и любой из ваших потоков может вызывать его одновременно.Это хорошо масштабируемое решение.
Однако для его работы необходимо выполнить дополнительную работу.Некоторая программа должна будет оценить текущие лайки и просмотры, а также обновить topforty клавишу.Это можно сделать через веб-приложение администратора или в виде постоянной работы на почасовой или ежедневной основе.Служба, определенная ниже, может сделать это также, просто выполняя свою работу с memcached, а не с объектом, который она сохраняет.
Доменный объект
Если постоянство является более важным,и вы готовы передать согласие с вашей средой веб-приложения, а затем создать службу, которая обрабатывает это:
public interface PopularityService {
public List<Item> getTopItems(int count);//gets n top items
//lets the service know someone liked a thing
public void registerLike(Item item, Person liker);
//lets the service know someone viewed a
public void registerView(Item item, Person viewer);thing
}
Для этого потребуется некоторый объект поддержки:
public class PopularStuff {
public List<Item> popularItems
...
}
Вы должны сохранить этот объект как отдельный объект (или, если ваша структура упрощает его, как одиночный объект).Ваш сервис должен воздействовать на этот объект, решая, что должно быть в нем и как его перемещать.Это будет решение для чтения, но не так для чтения, как другие статические данные, потому что предположительно люди будут делать много просмотров.Если вы используете что-то вроде Hibernate, вам будет очень легко перейти от списка элементов к фактическим элементам в вашей базе данных.
Обратите внимание, что я не обсуждаю основной алгоритм, так как вы этого не делалиспросите об этом, но о том, как реализовать структуру данных.Если вы можете предоставить подробную информацию о вашей текущей структуре, мы могли бы обсудить больше деталей.