2

我们正在开发程序,该程序适用于位于共享内存中的数据。程序要求延迟并处理大量数据。

如果程序失败,我们必须返回上一个工作状态 FAST。

一种方法是从事务日志中读取和处理数据,其中包含从一天开始的事务。但这一点都不快,考虑到事务日志的大小(数百 GB)。

我们现在正在寻找一种方法来创建可以写入磁盘并在程序失败时快速读取的数据快照。但是快照创建不能锁定程序执行,并且该快照中的数据必须是一致的。

如果我们使用本地内存而不是共享内存来保存数据,解决方案将很简单:

  1. 叉子()
  2. 将数据写入磁盘

由于linux上的copy-on-write,只会复制更改的数据,所以速度非常快。

但是我们使用的是posix共享内存。

有什么办法可以做到速度和一致性?

4

1 回答 1

0

If you can spare enough CPU cycles for a memcpy(), you could:

  1. fork()
  2. lock shared memory
  3. memcpy (shared_mem -> some_buffer)
  4. unlock shared memory
  5. write data to disk taking the time you like
于 2011-11-18T16:11:10.880 回答