For $n$ elements, a two-level hash table contains an $O(n)$ top-level hash table whose entries are hash tables also. Each table samples from a 2-universal family. To hash an element $x$, we first hash it to an entry (i.e., a bottom-level hash table) in the top-level hash table, then hash it to its destination in the bottom-level table. If we ensure each bottom-level table is quadratic in the number of items it contains, then the total space is $O(n)$ in expectation. Finally, we will impose a no-collision condition in the bottom-level tables; i.e., if a collision occurs, then we will randomly sample another hash function from the Hash family and rebuild the table.
If we are careful about when to double and shrink the table, then we can have expected amortized $O(1)$ inserts/deletes and $O(1)$ lookups. This seems good in theory for workloads that are heavily biased towards lookups, but how does its performance scale compared to a typical one-level hash table? Are there any use cases for this data structure in practice?