  Given a specified average load factor, hash tables offer the appeal of
constant time lookup operations. However, hash tables could face severe hash
collisions because of malicious attacks, buggy applications, or even bursts of
incoming data, compromising this practical advantage. In this paper, we present
DHash, a hash table that overcomes this challenge by allowing programmers to
dynamically change its hash function on the fly, without affecting other
concurrent operations such as lookup, insert, and delete. DHash is modular and
allows programmers to select a variety of lock-free/wait-free set algorithms as
the implementation of hash table buckets. With this flexibility, they can make
trade-offs between the algorithm's progress guarantee, performance, and
engineering efforts, and create DHash implementations that meet their
requirements best. Evaluations on three types of architectures show that DHash
noticeably outperforms other practical alternatives under heavy workloads. With
a load factor of 20, DHash outperforms the other three most widely used hash
tables by factors of 1.4-2.0, and when the load factor increases to 200, DHash
is 2.3-6.2 times faster.
