2017-01-10 2 views
0

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

По какой-то причине в существующем коде все ключи кэша хэшируются перед сохранением в кеше.

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

Парень, который изначально написал код, ушел, и знание о том, почему ключи кэшированы, было потеряно.

Может кто-нибудь предложить, если хэширование является правильной вещью или она должна быть удалена.

+1

Я думаю, вы видели это: http://www.alachisoft.com/resources/docs/ncache/ncache-programmers-guide.pdf – Mahdi

+0

Спасибо/Кажется, нет упоминания о хэширующих клавишах. Во всех примерах используется простая строка с четким ключом. – Neil

+0

Честно говоря, я не уверен, что интерпретировать из следующих слов: «Данные распределяются/распределяются между всеми серверными узлами на основе хэш-кода ключа кеша». – Mahdi

ответ

1

Хорошо так ваш вопрос

  1. Если мы хэширования ключи перед сохранением?
  2. Если вы сами делаете хэширования, будет ли он что-нибудь замедлить

Ну, кэш API работает на strings в keys. В фоновом режиме NCache автоматически генерирует хэши против этих ключей, которые помогают определить, где должен храниться объект. И где я имею в виду, в каком узле.

Когда вы говорите, что ваше приложение hashes ключи перед передачей его NCahe, то это просто ненужный шаг. NCache API должен был взять на себя эту головную боль от вас.

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

Излишне говорить, что если вы что-то делаете снова и снова, то это, безусловно, приведет к ухудшению производительности. Строки Hash будут использоваться снова для создания другого значения хэша (int).

+1

Спасибо за информацию. – Neil

1

Независимо от того, должны ли вы или не должны иметь ключи хеша, зависит от ваших системных требований.

NCache идентифицирует объект по его ключу и считает объекты с равными ключами равными. Ниже definition хэш-функции из Википедии:

Хэш-функция является любая функция, которая может быть использована для отображения данных произвольного размера в данных фиксированного размера.

Если вы остановите хеш-ключи, то кеш может вести себя по-другому. Например, некоторые объекты, которые NCache считали равными, теперь NCache может считаться не равным. И вместо одной записи в кэш вы получите два.

NCache не требует от вас хеш-ключей. NCache - это просто строка, уникальная для каждого объекта. Соответствующая выдержка из NCache 4.6 Programmer’s Guide:

NCache использует структуру «ключ» и «значение» для объектов. Каждый объект должен иметь уникальный связанный с ним строковый ключ. Каждый ключ имеет атомарное появление в кеше, является ли оно локальным или кластеризованным. Кэшированные ключи чувствительны к регистру в природе, и если вы попытаетесь добавить другой ключ с таким же значением, исключение OperationFailedException выдает кэш.

+0

В моем приложении ключи всегда уникальны, но после хэширования может и не быть. Это своего рода противоположность вашему ответу. – Neil

+0

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

+0

Мы очищаем все кэшированные объекты во время перераспределения, поэтому это не проблема. – Neil

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