我经常在我的 C++ 代码中使用 std::map 或 tr1::hashed_maps。我有一个即将进行的项目,我通常会默认使用此类构造,但是在这个项目中,我要求此类映射是非 volatile 的。 IE。在应用程序终止时(安全关闭或意外终止,例如断电), map 数据应安全地存储在磁盘上,并在后续应用程序执行时恢复。请注意,这并不要求存储断电之前的每一位数据,只是说几秒钟前的所有数据。
要求仍然是应用程序必须在访问和存储 map 方面具有高性能。显然,“高性能”是主观的,但每秒会有数百万次加载/存储到 map 中。
这让我“猜测”我应该使用 SQL 数据库,但是我对数据库没有经验,并且担心从简单的 C++ 容器迁移到完整的 SQL 基础架构会导致性能显着下降。 SQL 是否会“缓存”结果以减轻性能影响?
或者,一个简单的答案可能只是经常(比如每 10-30 秒),将映射的拷贝写入(序列化)到磁盘。根据 map 的大小, map 会很大(至少有数百万个条目),这可能不明智。
有什么推荐吗?
谢谢!
最佳答案
使用最好的锤子来钉钉子,尽管事实上您最喜欢使用 C++ 锤子(我会在同一条船上。)
就性能和数据完整性而言,数据库似乎是您的最佳选择。它们旨在处理您在帖子中描述的那种场景。
那么,我认为您需要做的两件事是:
- 为您要存储的信息类型开发可靠的数据库模型。我不是这方面的专家,但我知道做对这件事很重要。
- 对良好的 C++ 数据库包装器进行一些研究。这样您就可以将 MySQL 的详细信息留给图书馆,您可以专注于您最擅长的领域。
关于c++ - 非 volatile C++ 映射构造的备份方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9671200/