MurmurHash3 für Java
Hintergrund
Ich brauchte eine wirklich gute Hash-Funktion für die verteilte Indizierung, die wir für Solr implementieren. Da sie für die Partitionierung von Dokumenten verwendet wird, musste sie von wirklich hoher Qualität sein (gut verteilt), da wir keine ungleichmäßigen Shards wollen. Außerdem muss sie plattformübergreifend sein, so dass ein Client diesen Hash-Wert auf Wunsch selbst berechnen kann, um vorherzusagen, welcher Knoten ein bestimmtes Dokument enthält.
MurmurHash3
MurmurHash3 ist eine der beliebtesten neuen Hash-Funktionen dieser Tage, da sie sowohl sehr schnell als auch von hoher Qualität ist. Leider ist sie in C++ geschrieben, und eine kurze Suche bei Google ergab keine geeignete, qualitativ hochwertige Portierung. Also habe ich mir 15 Minuten Zeit genommen, um die 32-Bit-Version zu portieren, da sie für kleine Schlüssel wie Dokument-IDs schneller sein sollte als die anderen Versionen. Es arbeitet in 32-Bit-Blöcken und erzeugt einen 32-Bit-Hash – mehr als genug für die Partitionierung von Dokumenten nach Hash-Code.
MurmurHash3-java
Es wäre schön, wenn wir verhindern könnten, dass andere dasselbe tun müssen. Da solche Dinge klein genug sind, habe ich sie einfach unter die Public Domain gestellt und auf github hochgeladen. Auf diese Weise kann jeder die Datei oder die Funktion einfach in sein Projekt kopieren und zusätzliche Abhängigkeiten und Lizenzprobleme vermeiden.
Hier ist der Code, kopieren Sie ihn!