在mongodb源代码中,_view_private的用法是什么?

时间:2016-11-19 07:39:15

标签: mongodb

我正在阅读mongodb源代码。我有一个关于memory-map-file的问题。在DurableMappedFile类中有_view_write和_view_private。 _view_write用于保存映射的指针。 _view_private还保存映射的指针,但映射的指针是MAP_PRIVATE类型。 MAP_PRIVATE是写时复制。我不知道什么场合会使用MAP_PRIVATE的指针。 注意:DurableMappedFile类在durable_mapped_file.h / cpp.MongoDB中定义,源代码版本为2.6.12。

1 个答案:

答案 0 :(得分:6)

我们在内存映射文件的写视图上有一个私有副本的原因是我们不能冒险操作系统在整个写事务(WriteUnitOfWork)完成和写入之前将内存映射文件的修改区域写回磁盘的风险到期刊。只有在磁盘上持久化日志(同步)之后才能安全地开始将数据写入磁盘。我们通过在写视图上复制数据来实现这一点。然后定期我们重新映射我们的私人视图,这样我们就无法无限期地保留副本。

有关详细信息,请参阅principle of marginality

以这种方式进行更新可确保在硬崩溃(不清洁关闭)后重播日志将使数据保持一致状态。