Я часто использую std :: map или tr1 :: hashed_maps в моем коде C ++. У меня есть предстоящий проект, в котором я обычно по умолчанию использую такие конструкции, однако в этом проекте у меня есть требование, чтобы такие карты были энергонезависимыми. То есть после завершения работы приложения (как безопасно закрытого, так и случайно уничтоженного, например, при отключении питания) данные карты должны быть надежно сохранены на диске и восстановлены при последующем выполнении приложения. Обратите внимание, что это не является обязательным требованием, чтобы каждый бит данных сохранялся до отключения питания, просто все, скажем, за несколько секунд до этого.
Требования по-прежнему состоят в том, что приложение должно иметь высокую производительность с точки зрения как доступа, так и сохранения на картах. Очевидно, что «высокая производительность» субъективна, но в секунду на карту будут приходиться миллионы загрузок / магазинов.
Это заставляет меня «догадываться», что мне следует использовать базу данных SQL, однако я неопытен в базах данных и беспокоюсь, что произойдет значительное снижение производительности при переходе от простых контейнеров C ++ к полной инфраструктуре SQL. Будет ли SQL «кешировать» результаты таким образом, чтобы снизить эффект производительности?
В качестве альтернативы, простым ответом может быть просто часто (скажем, каждые 10-30 секунд) записывать (сериализовать) копию карт на диск. В зависимости от размера карт, которые будут большими (не менее миллионов записей), это может не иметь смысла.
Какие-либо рекомендации?
Спасибо!