Исходя из задачи:
Вы храните KEY - VALUE. Нам заренее не изветен ни KEY (тип и формат данных - строка или число) ни VALUE (его размер)
1) так как запрос на "чтение\запись" будет идти по ключу - высчитываем хеш ключа (sha256), берем несколько "октет" (у меня они так в голове называются) от хеша и дописываем\создаем файл с таким именем (это будет наш индекс ключей)
2) пишем VALUE в преобразованном формате (base64 или еще как) в файл данных в строку соотвествующую следующему индексу
Получается следующий фарш:
--------------
Создание записи:
Принмаем что БД пуста.
KEY = test
VALUE = datastring
HASH = sha256(KEY) = 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
OCTET = HASH[1-6] = 9f86d0 (три пары)
файл индекса = [OCTET].map (mapper)
файл последовательности записи = [OCTET].pnt (pointer)
файл данных = [OCTET].dat (data)
Читаем:
PNT (последовательный указатель - номер строки в файле данных) = read([OCTET].pnt)+1 = 1
Пишем:
[OCTET].map =>
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 = [PNT]
[OCTET].pnt = [PNT]
[OCTET].dat[PNT] = VALUE (предварительно преобразовываем - base64 или иное) = Пишем в строку равную PNT в файл [OCTET].dat - это сразу дает и запись и обновление данных
--------------
Чтение записи:
KEY = test
HASH = sha256(KEY) = 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
OCTET = HASH[1-6] = 9f86d0 (три пары)
файл индекса = [OCTET].map (mapper)
файл данных = [OCTET].dat (data)
Читаем файл [OCTET].map и ищем HASH = получаем указатель строки в файле данных = PNT
Читаем файл [OCTET].dat[PNT] (читаем строку PNT) = VALUE (преобразовываем в исходный формат)
=============
Думаю, если даже моя идея бред - то по крайней мере даст вам почву для размышления.
PS\ как более оптимальный вариант - хранить каждый блок данных в отдельном файле с именем = хешу от ключа.