Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2354563
  • 博文数量: 276
  • 博客积分: 5998
  • 博客等级: 大校
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-24 14:43
文章分类

全部博文(276)

文章存档

2014年(25)

2013年(11)

2012年(69)

2011年(167)

2010年(4)

分类: NOSQL

2013-07-19 15:21:06

Mongodb有三个storage view:Share view,private view,journal日志,前两个位于内存中,后一个位于磁盘上。


Share view:位于内存上,会存储已经改变的要刷新到磁盘上的数据(脏数据)。Share view是唯一一个直接连映射到数据库文件上的view。当你启用mongoDB的日志功能时,
mongod会请求操作系统把磁盘上的数据文件指向share view内存视图上。操作系统不会数据文件加载到share view中。Mongdb在需要时自己把数据文件加载到share view上。


Private view:位于内存上,存储用于读请求的数据,更改请求最先在这执行。MongDB把Private view指向share view。

Journal view:存储已经在private cache上发生更改的数据,但是会在更改数据刷新到 share view(cache) 之前存储。Journal  确保了数据的持久化。如果更改的数据没有刷新到
磁盘上的数据文件里,mongodb crash了,当mongodb 起来以后,mongodb会把journallog中没应用到数据文件中的数据回放到 share view(cache) 中,最终会应用到数据文件中。

 

当一个写请求发生,首先会更改 private view (cache)中的数据,然后默认每100毫秒刷新到journal log。journal log有一个记录当前日志点的pointer。

然后应用journal log中的写操作到share view ,这时share view 就和数据文件不一致。

然后默认每隔60秒,mongodb会请求操作系统刷新shared view中更改的数据到数据文件。

然后mongdb会把journal log中记录更改数据日志点的pointer,以前的数据删除掉。

为了数据的一致性,Mongodb通常会请求操作系统重新把share view 指向private view。。

           

阅读(5089) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~