2016-05-14 3 views
1

Мне интересно, какое окончательное решение для управления кешем. , скажем, у меня есть один сервер и неограниченное количество клиентов, подключенных к нему. клиенты продолжают отправлять поисковые запросы на сервер (позволяет вызывать запрос на поиск клиента -'x '), а сервер отвечает клиенту с некоторым -'y'. сейчас, чтобы ускорить работу своей поисковой системы, я хочу сохранить самые популярные запросы (x) в кэш-памяти и их ответы (y). (обратите внимание, что это важно для всех тех же x, что клиенты отправляют на сервер, они должны получать одинаковые y). У меня также есть база данных, в которой хранятся все предыдущие запросы (x, y, z-число запрошенных раз x).Управление кешем в поисковой системе

Я встретил некоторые проблемы при обновлении кэша:

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

  2. Как обновить кеш? (просто сканировать всю базу данных? Это довольно дорогостоящая операция)

3. Как много элементов запроса должен содержать мой кеш?

4. Как вы думаете, HashMap - эффективная структура данных для хранения кеша (я работаю с java).

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

+0

Этот вопрос слишком широк для StackOverflow. Кроме того, вопрос не просит помощи с кодом, который вы уже написали; это более концептуально. – CConard96

ответ

1

Холостяк попросил компьютер найти его идеальным партнером.

«Я хочу, чтобы компаньон, который является маленьким и привлекательным, любит водные виды спорта и любит групповые мероприятия.»

Компьютер ответил: «Мэри пингвина»

(Цитата из: http://www.recipeapart.com/perfect-partner/#ixzz48iEVSp1y)

Если у вас есть неограниченное количество клиентов, решение кеша ultimate должно заставить клиентов пересылать ваши данные. Вы можете сделать это с помощью Интернета. Примеры приложений, которые делают это, доступны, например. бит торрент.

Когда вы сузили ваши требования взглянуть на различных открытых реализаций кэша Source Java:

  • Apache Ignite
  • Apache Java Caching System
  • Apache Geode
  • inifinispan
  • hazelcast
  • EHCache
  • Google гуавы
  • Кофеин
  • cache2k

Начать использовать один. Прочтите руководства.

Читайте мой блог по адресу: cruftex.net

Различные сценарии требуют различных решений.

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

Может быть, я должен назвать реализацию кэша «конечным кешем». Но тогда этого не будет.

0

Вот некоторые мысли:

  1. Типичные хранит кэш кэшированных значений, индексированных хэш-код запроса. Поэтому, если вы знаете запрос, вы должны иметь возможность аннулировать кеш на основе этого. Или вы можете использовать разумный срок действия, и API кэша автоматически удалит истекшие элементы.

  2. Обновление кеша. Если ваши данные хранятся в БД, лучший способ сделать это - использовать обновленные счетчики или временные метки, хранящиеся в БД. Когда приходит запрос, и кешированный запрос имеет временную метку, отличную от БД, это время, чтобы полностью прочитать ее из БД. Cacheonix кэширует SQL-запросы, используя свой API DataSource.

  3. Что касается размера кеша, он должен быть достаточно большим, чтобы поддерживать здоровый ранг/промах, около 80%. В то же время вы хотите ограничить размер байта кеша, чтобы избежать нехватки памяти.

  4. HashMaps не так хороши для кеширования, потому что они не предлагают значимого уровня параллелизма и выселения, основанного на размере и множестве других проблем. Есть несколько API-интерфейсов кэша для производства, и вы можете добавить Cacheonix в список.

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

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