карта кеширования и вычислений - PullRequest
3 голосов
/ 15 января 2010

вариант использования корреляции:

read input 

if (correlation-id is already generated for this input) 
{ 
   lookup the correlation-id from the cache; 
   return correlation-id; 
} 

else 
{ 
   generate the correlation-id; 
   cache it; 
   return correlation-id; 
} 

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

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

1 Ответ

3 голосов
/ 15 января 2010

С классами Google Guava / Collection и мягкими или слабыми клавишами или значениями ваши ключи должны быть надежными ссылками, чтобы карта использовала equals (), а не == для поиска кэшированных значений. Если у вас есть слабые / программные клавиши, то поиск выполняется с использованием идентификатора, поэтому вы всегда будете получать промах кэша. Поэтому, если вы хотите, чтобы сборщик мусора собирал элементы из вашего кэша, вам нужно сделать значения мягкими или слабыми.

Я понимаю, что в будущем Google добавит функцию эквивалентности, чтобы вы могли указать, хотите ли вы использовать equals () или ==, и не делать этот выбор, выбирая сильные, слабые или мягкие ссылки.

Так как ваш объект Tuple реализует equals () и hashCode (), тогда вы просто делаете

new MapMaker()
    .softValues()
    .makeComputingMap(new Function<Tuple,String>() {
                                         public String apply(Tuple t) {
                                             // generate the correlation-id
                                         }
                                    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...