2011-11-18 25 views
2

我们正在开发程序,该程序用于位于共享内存中的数据。程序对延迟的要求很高,并且处理大量的数据。为需要延迟的程序实现快照功能

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

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

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

如果我们使用本地存储器用于保持,而不是共享存储器中的数据,溶液将是容易的:

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

由于副本上在linux上写,只有被更改的数据会被复制,所以它非常快。

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

有没有办法以最快的速度和一致性来做到这一点?

回答

0

如果可以腾出一个的memcpy足够的CPU周期()时,可以:

  1. 叉()
  2. 锁定共享存储器
  3. 的memcpy(shared_mem - > some_buffer)
  4. 解锁共享内存
  5. 把数据写到磁盘上花上你喜欢的时间
+0

现在正在共享内存大小为15-30 GB。所以,不,memcpy会花费太多时间和内存。 –