代码改变世界

关于网站应用中XML的使用心得[原创]

2007-10-06 11:32  Brush  阅读(4998)  评论(23编辑  收藏  举报

   最近忙于做一个小网站,是电子商务性质的。其中很多地方我用到了XML文件作为数据存储的方式,目的就是减轻数据库负担。
  经过一两个月,在XML数据操作这块也有了一定经验,现在把它写出来共享给大家,同时也欢迎大家参与讨论。

(注:本文虽然质量不高,但转载望注明一下出处,谢谢合作!)


1。如果数据库表的记录是分组的,总的操作频繁但每组的并不频繁,且数据对保密性要求不高。那可以用XML。 

   如论坛的回帖,因为如果用数据库,好多回帖都添加到一张表里,数据库并发的可能性就大了,但换成XML,每个帖子专门建立一个文件夹,回帖里的内容均用XML文件来保存,这样的话,并发性就得到了很好的控制。


2。数据库量大的,如果用XML保存,在存取上会比较慢。所以如果能分成若干个XML文件保存就比较好。 
    
  如回帖,每50个回帖建立一个新的XML文件,而且名字跟页数对应,这样也能简化翻页。更大地减少了并发操作。


3。能用XSD描述数据结构的,就尽量描述。(开始是写的XSLT,后来更正)

  这样对查询数据(当使用DataSet查询时)时,尤其是在数据量大的时候,能获得相当大的速度提升(它跳过了DataSet的自动分析XML结构的步骤)。


4。查询XML数据,尽量使用XML空间下提供的类。

  这样能对XML进行快速地高效率地读写操作。 (稍后我会把自己写的XML操作类帖出来,供大家参考


5。使用XML时,要注意结点的值。

  有的值是需要过滤掉的,因为查询XML数据要用到XPath,其语法中的关键字是不能出现在查询关键字里的。


6。能用结点,就不要使用属性。尽量构架规范的XML结构。 

  比如说相册:
    <root >
       <相册 >
          <名称/ >
          <创建时间 / >
          <相片 >
              <图 >
                 <图名/ >
                 <地址/ >
                 <上传时间/ >
              </图 >
          </相片 >
       </相册 >
    </root >

  在这个结构中,每个图要这样放在相片结点下,而不要直接放在root结点下。这样有助于XSD(原为XSLT,后更正)结构的清晰。程序读取数据也方便。
  另,如果属性使用太多,对XPath查询会有影响,一些查询就可能不容易实现。


  其实使用XML作为数据存储方式还有好多优点,比如RSS订阅,客户端解析成HTML页面等。

  以上仅是个人的一点经验之谈,不足不馁不对之处,望各高手不吝赐教。





  后来加的:

   这里我看重的是数据的分别保存分别处理的思想。利用XML文件的分开存放使无相关的数据不再像数据库的表那样会互相影响。

   大家以考虑下,如果回帖用表来保存,这样,不管你回复哪个帖子,都要在这张表中插入一条新记录,此时的并发显然是比较高。高的原因是,不相关的回帖,即回复不同的帖子,在这种情况下也相互影响、限制了。

   如果回帖换成使用XML保存,每个帖子的回复只使用一个XML(当然为了分页方便,可以每N个回复建立一个文件,这样也省了分页查询了)。此时的并发,就被分解了。分解到回复一个帖子的情况。并且,在写XML文件时候,加上写保护,独占此资源,写完释放(而读取回帖不受影响)。这样,除非瞬间有许多人在回复同一帖子,才会形成比较大的并发操作(此时还能产生这样的并发量的网站实在是够大的了)。

   网站中的个人消息,操作记录等,我觉得,均比较适合用XML作数据源。而且是很理想的。




下面是我在项目中自己写的XML操作类。


XML操作类