The Proposed Server API page asks "What do we want keys to be?".
This page collects and evaluates the options.

Options

User-allocated variable-length or long fixed-length keys
User-allocated 64-bit keys
User-allocated 64-bit keys with system key generation assistance
System-allocated 64-bit keys with reuse
System-allocated 64-bit keys without reuse
System-allocated (64-bit key, 64-bit generation number) tuples
System-allocated (48-bit key, 16-bit generation number) tuples

Hash Tables

The "sweeter" options demand fast hash tables.

For a fast hash table:

One level up, we need to decide how to use this primitive:

This choice will affect how frequently resizing is necessary and at what scale.

We should also consider what happens when you want to evict part of a key range to another machine:

  1. Decide what to split.
  2. Transfer the objects from the old master's log to the new master's log.
  3. On the new master, add entries into a hash table for this new key range.
  4. On the old master, you want to clean up the now invalid entries from the hash table.