XML关于锁的问题

来源:互联网 发布:网络布线人工费 编辑:程序博客网 时间:2024/06/09 19:26
 

最近项目老有反应,机器突然之间不能用了,经排查是xml文件偶尔出现数据丢失。查了代码,没发现什么问题,更新成功后都进行了相关数据格式的验证。最近一次出现的是进行shell 复制xml文件的时候,偶尔(调bug最怕的就是偶尔出现的问题了)出现文件的丢失,还好有知道操作那里出现了问题。大脑搜索了 一遍,没有类似的情况。代码看了一下,逻辑理了理,没什么问题。想了想只可能是在文件复制的过程中有人在读这文件,而导致文件复制出现错误,导致脏数据出现。

接着验证了下自己的想法,进行复制操作的时候,同时读那文件,果然不出所料,出现了数据错误。怎么办呢?很自然的在xml复制的时候给xml上一个锁,限制其读。文件操作有可以有共享锁 ,排它锁。数据库有表锁,页锁,行锁等来保证其并发访问。Xml有啥锁呢?百度里google了以下,xml锁,原来有很多前辈在xml并发操作的时候都遇到过此类问题呀。可惜都没什么很好的解决办法。然后在xml的锁都是很正在学术界进行研究的。这个问题麻烦了哦!看来只能靠自己的智慧了。其实java与c#都有说自己的相关解决方法,但俺用的是php,一看貌似没什么可以借鉴的。考虑到文件在复制的时候有人读出现问题,那为就先把xml文件读的权限去掉,复制完后再加上,这不就ok了,也相当于实现了锁了哦!在xml文件前后分别写了chmod(“xxx.xml”,0300),于chmod(“xxx.xml”,0755);再重新进行测试,没出现。以为ok了(偶然害死人)。第二天再测了测,不行有出现了,这怎么回事呢?

1、 问题肯定是出现在这里,自己的测试与前辈们的帖子可以证实这一点。

2、 自己很确信这种解决思路是正确的。

那问题之有出现在chmod身上了。仔细查了php手册,发现chmod需要权限的要求(最近强烈的感觉手册是个很好的东西),而运行php的是apache权限,肯定是没权限了。这下又傻了,那怎么改变权限呢?还好前人写了一个执行shell的php类。

首先执行了@myxxx_Exec::execute ( "sudo chmod 0200  xxx.xml", $params, $output, true );

在读xxx.xml,果然没有读的权限,后面再加上@myxxx_Exec::execute ( "sudo chmod 0666  xxx.xml", $params, $output, true );,能读了。

 

此类算是给xml加了一个“锁”。此方法也是建立在并发很少的情况下,并发大的恐怕还得做操作系统级别的考虑。网上有评论说xml在高并发下会拖速度,丢数据。呵呵,想想也是。

下面贴上xml的优点与缺点,在做项目的时候可以参考下认真考虑是否需要用它。

 

 

XML的特点

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

             

 

          1 

具有良好的格式

标记一定要拥有结尾标记,如:<name>coolsun</name>

2

具有验证机制

XML的标记是程序员自己定义的,标记的定义和使用是否符合语法,需要验证。XML有两种验证方法:一种是DTD(Document Type Definition),即文档类型定义,DTD是一个专门的文件,用来定义和校验XML文档中的标记;另一种是XML Schema,用XML语法描述,它比DTD更优越,多个Schema可以复合使用XML名称空间,可以详细定义元素的内容及属性值的数据类型。

3

灵活的WEB应用

在XML中,数据和显示格式是分离设计的,HTML提供显示的内容,而XML描述数据本身。

4

丰富的显示样式

XML数据定义打印、显示排版信息主要有3种方法:用CSS定义打印和显示排版信息;用XSLT转换到HTML进行显示和打印;用XSLT转换成XSL的FO(Formatter Object)进行显示和打印

5

XML是电子数据交换(EDI)的格式

XML是为互联网的数据交换而设计,它不仅仅是SGML定义的用于描述的文档,而且在电子商务等各个领域使用数据交换成为可能

6

便捷的数据处理

XML可以很方便地与数据库中的表进行相互转换。XML使计算机能够很简易地读取和存储资料,并确保数据结构精确。

7

面向对象的特性

XML是信息的对象化语言。DTD和Schema是界面和类(Interface和Class),XML是对象实例(Object),XSL是方法和实现(Method和Implement)。XML-Data解决了XML类的继承问题。

8

开放的标准

XML基于的标准是为Web进行过优化的。由于XML彻底把标识的概念同显示分开了,处理者能够在结构化的数据中嵌套程序化的描述以表明如何显示数据。XML是信息的高层封装与运输的标准。

9

选择性更新

通过XML,数据可以在选择的局部小范围内更新。每当一部分数据变化后,不需要重发整个结构化的数据。

10

XML是一个技术大家族

XML是一套完整的方案,有一系列相关技术,包括文件数据验证、显示输出、文件转换、文档对象和连接等。

 

 

 

 

1

树状存储

虽然搜索效率极高,但是插入和修改比较困难

2

大数据量低效率

XML的文本表现手法、标记的符号化会导致XML数据比二进制表现数据量增加,尤其当数据量很大的时候,效率就成为很大的问题。

3

管理功能不完善

XML文档做为数据提供着使用,没有数据库系统那样完善的管理功能

4

通信难

由于XML是元置标语言,任何人、公司和组织都可以利用它定义新的标准,这些标准间的通信就成了巨大的问题。

 

 

 

原创粉丝点击