Мне нужно составить список пар ключ-значение (аналогично std::map<std::string, std::string>
), которые хранятся на диске, и могут быть доступны нескольким потокам одновременно. ключи могут быть добавлены или удалены, значения могут быть изменены, ключи являются уникальными. Возможно, все это может не поместиться в память сразу, поэтому обновления карты должны быть сохранены на диск.
Проблема в том, что я не уверен, как подойти к этой проблеме. Я понимаю, как справляться с проблемами многопоточности, но я не уверен, какая структура данных подходит для хранения данных на диске. Практически все, что я могу придумать, может кардинально изменить структуру и вызвать существенную перезапись дискового хранилища, если я подойду к проблеме лицом к лицу. С другой стороны, реляционные базы данных и реестр Windows решают эту проблему, поэтому должен быть способ ее решения.
Есть ли структура данных, которая "сделана" для такого сценария?
Или я просто использую любую традиционную структуру данных (например, деревья или списки пропусков) и создаю какой-то «диспетчер памяти» («куча» на диске), который распределяет порции дискового пространства, загружает их в память по запросу и выгружает их на диск, когда это необходимо? Я могу себе представить, как написать такую «кучу на основе диска», но это решение не очень элегантно, особенно когда вы добавляете многопоточность к изображению.
Идеи