Оптимизация производительности Java HashMap / альтернатива



Я хочу создать большую хэш-карту, но put() производительность недостаточно хороша. Есть идеи?



другие предложения по структуре данных приветствуются, но мне нужна функция поиска карты Java:



map.get(key)



В моем случае я хочу создать карту с 26 млн. записей. Используя стандартную Java HashMap, скорость put становится невыносимо медленной после 2-3 миллионов вставок.



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



мой метод хэш-кода:



byte[] a = new byte[2];
byte[] b = new byte[3];
...

public int hashCode() {
int hash = 503;
hash = hash * 5381 + (a[0] + a[1]);
hash = hash * 5381 + (b[0] + b[1] + b[2]);
return hash;
}


Я использую ассоциативное свойство addition, чтобы гарантировать, что равные объекты имеют один и тот же хэш-код. Массивы байтов со значениями в диапазоне 0 - 51. Значения используются только один раз в массиве. Объекты равны, если массивы содержат одинаковые значения (в любом порядке) и то же самое для массива B. Таким образом, a = {0,1} b = {45,12,33} и a = {1,0} b = {33,45,12} равны.



"редактирование", Примечания:




  • несколько человек критиковали использование хэш-карты или другой структуры данных для хранения 26 миллионов записей. Я не понимаю, почему это кажется странным. Это похоже на классическую проблему структур данных и алгоритмов для меня. У меня есть 26 миллионов элементов, и я хочу иметь возможность быстро вставлять их и искать их из структуры данных: дайте мне структуру данных и алгоритмы.


  • установка начальной емкости Java по умолчанию HashMap до 26 миллионов уменьшается производительность.


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


714   0  

Comments

    Ничего не найдено.