2009-08-14 2 views
2

Я получаю некоторые вопросы с сервера (базы данных) и показывая его клиенту (пользователю) в браузере. Клиент ответит на вопрос и, основываясь на его/ее ответе, следующий набор вопросов будет получен из базы данных. Теперь я хочу предварительно выбрать следующий набор вопросов, пока пользователь прочитает данный вопрос, так что время ожидания для пользователя, чтобы увидеть следующий вопрос, будет короче.Кэш-механизм (структура данных)?

Мои вопросы: как хранить предварительно заданные вопросы, то есть какую структуру данных я должен использовать для хранения предварительно заданных вопросов в памяти, чтобы я мог повысить производительность? Я хочу «кэш» тип вещи. Также после того, как пользователь ударил, любой вопрос из кеша вопроса больше не будет.

PS: Каждый вопрос имеет уникальный идентификатор.

Благодаря

Нэвин

+0

, какой язык программирования? – 2009-08-14 07:40:20

+0

Может быть любой язык веб-разработки. – Naveen

ответ

2

Есть несколько вариантов, чтобы идти об этом. Тот, который имеет большое значение, тот, который делает мало.

  • Небольшая разница заключалась бы в том, чтобы получать вопросы и хранить их в сеансе пользователя. В основном это зависит от того, где хранится ваш сеанс, также может быть база данных или файл. Это имеет смысл только в том случае, если ваши таблицы db очень денормализированы, и для получения ответа требуется много соединений. Я сомневаюсь, что это так, поэтому это не будет иметь большого значения для пользователя независимо от того, какая структура данных использовалась.

  • Большая разница сделала бы предварительную выборку с помощью AJAX, используя javascript прямо в браузере. В этом случае достаточно простого массива. JS дает вам гибкость для создания любых объектов с любыми свойствами, что-то было бы достаточно хорошим. Поэтому напишите poller в JS, который выбирает вопросы с сервера, пока пользователь смотрит на вопрос, возвратите их, например, с помощью JSON. JSON станет простым объектом. Поскольку каждый пользователь хранит только пару вопросов, предварительно выбранных в своем браузере, выбор конкретной структуры данных также не имеет значения.

+0

ваше второе решение, использующее AJAX, потенциально может быть проблемой, если намерение не позволяет пользователю просматривать несколько вопросов одновременно. Поскольку JSON по существу легко просматривается на клиенте, пользователь может потенциально определить, что вы предварительно задаете вопросы на местном уровне и используете инструмент, например Firebug, или что-то подобное, чтобы получить предварительный просмотр по всем заранее заданным вопросам. Просто говоря :) –

+0

Я не знаю Нет никаких требований к секретности. –

0

Первые несколько вопросов, чтобы адаптироваться к вашим условиям:

  • если вы используете Java?
  • используя Hibernate также?

Если вы хотите упреждение на сервере, много кэширования существует.

Принимая во внимание ваш уникальный идентификатор (см. PS), если этот идентификатор связан с базой данных, и вы используете Hibernate, самым простым решением было бы настроить кэш второго уровня Hibernate для этого объекта. Тогда ваш единственный код должен был выполнить запрос заранее.

Если тезисы не подходят, я использовал EhCache в качестве решений для кеширования. Как-то легко начать использовать, и у него есть много возможностей, доступных, когда они вам понадобятся.

1

Попробуйте использовать LinkedHashMap, поскольку алгоритм LRU будет реализован быстро с хорошей производительностью.

Прочитайте эту ссылку, а также:

LinkedHashMap as cache