For what the OP calls “shuffling hashes”, there’s at least two use cases with different goals. If you want multiple processes to get the same hash over time and space (a distributed system and/or hashes stored persistently) you want a hash with consistent output, like highway hash. In contrast, if your hash is an implementation detail of a single-process in-memory hash map, say, you don’t care if its representation changes over time. https://github.com/tkaitchuck/aHash/blob/master/compare/readme.md has a good discussion of this.
If you want multiple processes to get the same hash over time and space (a distributed system and/or hashes stored persistently) you want a hash with consistent output, like highway hash. In contrast, if your hash is an implementation detail of a single-process in-memory hash map, say, you don’t care if its representation changes over time.
Indeed this is correct, and I’ll have to think about how to express this in the context of the article, without getting bogged down into implementation details… (Because all algorithms linked there, including the keyed ones, are deterministic. It is just a matter of which / how you use them.)
I thought really hard about the topic of consistent hashing, and I’ve decided not to include it (at the moment of writing) because it’s not actually a hashing algorithm (or even a class of such algorithms), but instead it’s a particular usage of other hashing algorithms (i.e. more of a use-case).
In fact, just like consistent hashing is closely related to hashing, so are other topics like content addressing or various load-balancing schemes that rely on hashing (as opposed to load).
I’ll wait for some more feedback on the topic, and perhaps in the end I’ll add a hint to these topics in a separate section.
For what the OP calls “shuffling hashes”, there’s at least two use cases with different goals. If you want multiple processes to get the same hash over time and space (a distributed system and/or hashes stored persistently) you want a hash with consistent output, like highway hash. In contrast, if your hash is an implementation detail of a single-process in-memory hash map, say, you don’t care if its representation changes over time. https://github.com/tkaitchuck/aHash/blob/master/compare/readme.md has a good discussion of this.
https://en.wikipedia.org/wiki/Metaphone is a family of soundex alternatives. https://en.wikipedia.org/wiki/Category:Phonetic_algorithms lists a few more.
Indeed this is correct, and I’ll have to think about how to express this in the context of the article, without getting bogged down into implementation details… (Because all algorithms linked there, including the keyed ones, are deterministic. It is just a matter of which / how you use them.)
Thanks for the feedback.
You may want to add consistent hashing
I thought really hard about the topic of consistent hashing, and I’ve decided not to include it (at the moment of writing) because it’s not actually a hashing algorithm (or even a class of such algorithms), but instead it’s a particular usage of other hashing algorithms (i.e. more of a use-case).
In fact, just like consistent hashing is closely related to hashing, so are other topics like content addressing or various load-balancing schemes that rely on hashing (as opposed to load).
I’ll wait for some more feedback on the topic, and perhaps in the end I’ll add a hint to these topics in a separate section.
Thanks for the feedback.