Google File System里面有一小节关于文件追加模式是原子操作,笔者不得其解:
l例如现在有两个独立的进程A和B同时append 数据到一个文件里,添加文件必须收lseek文件的末尾的位置,找准位置后才能添加数据:
首先进程A,seek到位置1500byte的位置是文件的末尾
同时进程B,也seek到1500byte
第三,进程B写入100byte的数据,此时文件末尾变成1600byte
第四,调度到A进程时,write数据,由于第一次Alseek到的位置是1500tye,因此A和B写入数据时,实际上已经产生了互相覆盖的可能
1。O_APPEND的含义
是在每次写之前,都讲标志位移动到文件的末端。表面上读这句话可能会有误解,提出一个问题:当在O_APPEND打开后,然后用
lseek移动到其他的位置,然后再用write写,这个时候,请问你数据写到哪里去了?是在末端,还是lseek移动到得位置。答案是在末端,因为
O_APPEND打开后,是一个原子操作:移动到末端,写数据。这是O_APPEND打开的作用。中间的插入是无效的。例如 : int fd =
open("test.txt",RDWR O_APPEND); lseek(fd,10,SEEK_SET);
if(write(fd,buffer,strlen(buffer)) !=strlen(buffer)){ perror("write
error"); exit(1); }
read(fd,buffer,20);这里lseek是没有用的,write的写入是到末端的。在write写完后,标志位是在文件末端的,这个时候的
读是不会读的,所以以前的lseek是没有用的,除非你读之前再lseek一次。 这里的read将不会读出
任何数据,因为在末尾。它还是保持原来的写入的数据。
2
在read读出数据的时候,要明白一个问题。read读出的数据大部分情况下,不是以0结尾的。这样就造成了一种情况,你要输出读出数据的时候,就会出现
问题,因为puts,printf函数都是以0作为输出结束符的。就出出现前面的字符是你想看到的,后面的大部分是乱码.而对于fgets等函数,会在末
尾自动加0
很明显可以看出O_APPEND提供了无锁的文件追加方式,这个机制为并发append,提供了好的内核级别的底层支持,因此GFs的原子记录增加的描述是正确的
- 大小: 47.9 KB
分享到:
相关推荐
在实验环境下,GFS文件系统统一安装到了redhat linux7。2下,(最好不要使用redhat 7.1,因为GFS安装成功后,可能会使系统启动失败)因为GFS5。0要求linux的内核必须是2.4.16以上。所以在安装GFS文件系统之前,需要...
本文介绍GFS分布式文件系统的技术设计原理,是学习分布式文件系统的资料
基于GFS2共享模式搭建GBase 8s SSC集群-2
GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,但可以提供容错功能。它可以给大量的用户提供总体性能较高的服务。 1、设计概览
基于GFS2共享模式搭建GBase 8s SSC集群-1
GFS分布式文件系统实验包
google filesystem 文献,非常有用的文档
gfs2的基本组成,安装及安装使用时的注意事项。对于学习gfs2的人来说可以看看。
关于gfs2的介绍文档,包括gfs2的基本组成,安装及安装使用时的注意事项
• 不管是文件还是服务,均通过“冗余+故障自动转移”保证高可用 • 由于存在单点master,GFS将“降低与单点master的交互”作为性能优化核心 • 通过写日志,原子修改,checksum,快速监控快速恢复等方式保证可靠性...
GFS配置文件,还是比较全面的,可以下载下来看看
基于GFS2共享模式搭建GBase8s SSC集群-3.docx
分布式文件系统-GFS1
GFS TOOLBOX FOR MATLAB
RHEL5下安装GFS集群文件系统。具体的包详见我的另一个资源。GFS安装包
java通过ucar.ma2,ucar.nc2读取grib和grib2数据,并将读取的数据解析写入到NC文件中;亲测有效,若有疑问可私信交流!!!
用于通过 bittorrent 分发 GFS 文件的脚本 mktorrent-gfs-0.25.py 此脚本轮询 FTPPRD 服务器以获取新文件,下载它们并制作 .torrent 文件 用法: ./mktorrent-gfs-0.25.py {run} 示例: ./mktorrent-gfs-0.25.py ...
我们设计并实现了Google GFS文件系统,一个面向大规模数据密集型应用的、可伸缩的分布式文件系统。GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服务
基于linux的gfs文件系统集群手册,有兴趣的可以看看
GFS和上一个分布式文件系统有着很多相同的设计目标,比如性能,扩展性,可靠性,以及可用性。不过,他的设计是基于我们应用的工作量和技术环境驱动的,包括现在和预期的,都有部分和上一个版本的约定有点不同。这就...