c++ - 非 volatile C++ 映射构造的备份方案

标签 c++ database stl map backup

我经常在我的 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/

相关文章:

c++ - XML 解析 : Checking for strings within string C++

c++ - 如何在控制台窗口中使用 C++ 显示图像?

c++ - 不同线程中的 qt 同时 MySQL 查询 = 崩溃

MySQL 手动更改跟踪

c++ - std::vector 是否有转换运算符?我看到了什么?

c++ - 为什么将此位移至 51

java - 我的 Java Swing 登录表单不起作用

mongodb - 如何释放 MongoDB 中已删除集合的磁盘存储空间?

c++ - 在 `std::map` 中存储对象时代码崩溃

c++ - 如果 vector 有足够的空间(通过保留创建),std::vector::insert() 是否会使迭代器无效?