8 байт достаточно для значения хеша.
8 байт на смещение на диске и 8 байт на длину объекта. на самом деле можно 2 байта на длину объекта, потому что мы не разрешим настолько длинные оригинальные урлы на самом деле.
учитывая, что сторадж - append-only ты можешь в бекграунде периодически оптимизировать хеш-таблицу, чтобы она была плотной, а не разреженной в оперативе, оставляя разреженную часть очень небольшой.
запись тривиальна:
1) считаем хеш
2) пишем объект на диск
3) пишем строчку в индекс (24 байта)
чтение тривиально:
1) считаем хеш
2) читаем смещение и длину объекта из индекса
3) отправляем с диска сразу в TCP-сокет