2

问题

我应该如何备份程序中的实时数据?我目前正在使用 C++ Boost 中的“Interprocess”库提供的内存映射文件。我想知道有没有更好的替代解决方案?

更多细节

我的程序定期从硬件设备接收实时数据并将数据存储到固定大小的缓冲区中。通常周期很短,比如 3 秒。因为缓冲区很重要,所以我想备份它,以防我的程序崩溃,它可以恢复到崩溃前的原始状态。

我这样做:估计缓冲区的最大大小并创建一个相同大小的内存映射文件。绑定内存缓冲区和映射文件,所以当内存发生变化时,变化会立即写入本地文件。

当程序从崩溃中恢复时,它只是读取映射文件并反序列化数据。

根据一些先决条件,此解决方案可以正常工作:1)。数据量是预先知道的:3 个数据项或 5 个数据项。2)。每个数据项的大小都是预先固定的(在 C/C++ 语言中,这意味着一个固定大小的结构/类)。

但是,我预见到我的项目中会发生一些可能会打破这些先决条件的事情: 1)。数据项数量可能会在系统运行时发生变化。 客户可能会开始使用更多的硬件设备,因此会收到更多的数据。这意味着我需要重新创建映射文件,复制旧数据,然后开始存储新数据。这可能会带来性能问题。2)。一些特殊数据的大小无法预先确定,例如用户输入的一些描述信息。

那么:如何备份程序中的数据? 我想知道是否有比内存映射文件更好的解决方案?

4

0 回答 0