Copy-On-Write(写入时复制)技术

看google的hdfs论文时看到这个概念。

Copy-On-Write属于逻辑快照的一种,还有一种物理快照,百度了一下 ,快照里边概念还挺多,主要是以前没接触过。以后再整理。

Copy-On-Write是写入时才复制的意思,找到两个例子

1.往磁盘写数据,先写到的是内存里面,只有文件close或flush时才真正写到磁盘。

2.某个对象(值)同时赋值给多个变量,这多个变量默认情况下引用的是那个值的同一个指针,当某个变量对这个值作出改变时,才发生copy,产生一个新值给那个变量。


http://www.cnblogs.com/chenglei/archive/2009/08/06/1540175.html

看了一下上边这个文章,一下就明白了为什么git会出自林纳斯·托瓦兹之手了。

git里边的快照就是酱紫的嘛


如果用过git,Copy-On-Write快照技术在google的hdfs的应用就比较好理解了:

1.对于一个文件来讲

在复制一个文件的时候并不是真正的把原先的文件复制到内存的另外一个位置上,而是在新文件的内存映射表中设置一个指针,指向源文件的位置(syslink),并把那块内存的Copy-On-Write位设置为1.

对这个文件执行读操作的时候,内存数据没有变动,直接执行就可以。

在写的时候,才真正将原始文件复制一份到新的地址,修改新对象的内存映射表到这个新的位置,然后往这里写。

2.对于整个文件系统来讲

快照整个文件系统是google论文形容几乎是瞬间完成的。

当有文件变化时,就是上边对于一个文件的情况。

修改的文件数应该少于不修改的文件数


hdfs的具体操作:

在快照操作之后,当客户机第一次想写入数据到Chunk C,它首先会发送一个请求到Master节点查询当前
的租约持有者。Master节点注意到Chunke C的引用计数超过了1(alex注:不太明白为什么会大于1.难道
是Snapshot没有释放引用计数?)。Master节点不会马上回复客户机的请求,而是选择一个新的Chunk
句柄C`。之后,Master节点要求每个拥有Chunk C当前副本的Chunk服务器创建一个叫做C`的新
Chunk。通过在源Chunk所在Chunk服务器上创建新的Chunk,我们确保数据在本地而不是通过网络复
制(我们的硬盘比我们的100Mb以太网大约快3倍)。从这点来讲,请求的处理方式和任何其它Chunk没
什么不同:Master节点确保新Chunk C`的一个副本拥有租约,之后回复客户机,客户机得到回复后就可
以正常的写这个Chunk,而不必理会它是从一个已存在的Chunk克隆出来的。

参考资料:

http://autumnice.blog.163.com/blog/static/555200201010265035695/

http://www.cnblogs.com/chenglei/archive/2009/08/06/1540175.html

http://blademaster.ixiezi.com/2010/03/27/the-google-file-system中文版/

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页