2015-06-10 3 views
1

Мне интересно, было бы хорошей идеей использовать хэши (CityHash, Murmur и т. П.) В качестве ключей в хранилище с ключом, например Hazelcast. Я ожидаю, что в базе данных будет около 2 000 000 000 записей (URL-адресов), поэтому могут произойти столкновения. Было бы не очень важно потерять некоторые данные с помощью хеш-коллизий, но, конечно, лучше было бы их избежать.Использование хешей в качестве идентификаторов в хранилищах значений ключа

Запись содержит URL-адрес, отметку времени, код состояния. Основными операциями являются вставка и поиск того, существует ли URL-адрес уже.

Итак, что вы могли бы предложить, учитывая скорость имеет значение:

  • с помощью ID generator или
  • с использованием хэш-алгоритма, как CityHash или ропота или
  • используя соответствующую строку, URL в этом случае, сам?
+0

Какова остальная часть данных, которые необходимо хранить? Какие операции необходимо выполнить? Просто вставьте и проверьте дублирование? Или вы считаете посещения или отчеты по истории URL? Многие хранилища ключевых значений, которые я видел, будут обрабатывать строковые ключи с хэшированием за кулисами, включая прозрачную обработку хеш-коллизий между отдельными строками. Таким образом, добавление собственного хеш-кода может ухудшить производительность. –

+0

Спасибо за ваш комментарий. Я добавил некоторые детали к моему вопросу. – deamon

ответ

2

Hazelcast не полагается на методы hashCode/equals ключевого объекта, вместо этого использует хеш MurMur двоичного представления ключа.

Одним словом, вы не должны беспокоиться о столкновении хэшей.

+0

Некоторый пример с объяснением был бы замечательным. – Nilambar

+0

@ Ниламбар Я не думаю, что могу привести здесь какие-либо содержательные примеры, поскольку хеширование происходит за кулисами. Соответствующий код может быть найден следующим образом: com.hazelcast.map.impl.proxy.MapProxyImpl # put (K, V, long, java.util.concurrent.TimeUnit) –