如何在数据库保存大量XML文档?
日期:2006-09-17 荐:
作者:江南 2003年12月01日 选自:中国计算机报
在关系数据库中存储大量XML文档会导致很多问题。解决这些问题的首要步骤是深刻理解XML文档中的参数。然后正确设计合适的解决方法。解决方法可以包括:一系列的结构表将XML文档分割为小块,或者直接捆绑到数据库中的BLOB域。
大量文档的潜在问题
当在关系数据库中保存XML文档,尤其是保存大量的XML文档时,由于采用方法的原因,可能会产生很多问题。
有什么可能使得一个XML文档变得非常巨大呢?经过测试发现,一个XML文档变得很大的迹象是文档不能正常启动。这可能是因为以下潜在问题造成的。
首先是原始空间(raw space)的问题。出现的问题与XML文档的使用频率和存放空间相关,并不是因为文档大于通常情况下的状态,而是由于频繁地使用它们造成的问题。使用者必须有一个适当大小的数据分区或数据库来存放这些文档。
在关系数据库中保存大量XML文档的解决办法
其次,运行数据库可能会产生错误。有时候XML文档会分成多个部分,存放在代表XML文档结构的不连续的表中。但通常情况下,XML文档存放在BLOB域、文本域或者VARCHAR域中。
除了在数据库设计上的缺欠之外,使用者还有可能碰到与数据库通信的界面方面的问题。例如,绝大多数SQL执行都限制数据为4096字节——这就意味着,当使用SQL向数据库发送10KB文档的时候,该文档将会遇到问题。在数据库存储程序中也存在类似的限制。如果没有意识到这些限制以及文档是否超出范围的,使用者在使用过程中难免会碰到这些问题。
数据库设计
开发人员和数据库管理人员必须清楚地理解XML文档中将要产生的操作,这样才有可能正确地设计数据库。理解将如何使用数据库也同样是相当重要的。
如果以整块方式存储整个文档,这时有多种选择。对于非连续数据,使用者应该设计出代表XML结构的表,并将数据分开存放到独立的表中。将数据分开存放的优点是在于可索引性和可查询性,以后进行查询操作时不需要再对整个文档进行操作。
BLOB(Binary Large Objects,大型二进制对象)域被用于存储大型的二进制格式的数据。例如,加密文件通常都用于BLOB域。BLOB域非常适合存放XML文件。不过,BLOB域不具备可索引性和可查询性,而且它不能通过标准的SQL与BLOB交换大量的数据。
两种解决方法
一个解决SQL限制的方法是将XML文档分割成为4KB或更小的块,这些小块再存放在表中,然后使用ID域将这些小块联系起来。
在存储这些文档时,使用者应该将它们分割成为小块并存放在表中。当返回文档时,使用者通过特定的ID选择所有的块,然后以合适的顺序对它们进行集合。虽然比较麻烦,但这一方法对于多数据库非常有用。
使用BLOB域可以在不分割的情况下存放大量XML文档,但是BLOB域的问题在于不能使用SQL存储和获得数据。近年来,数据库厂商都有了自己的存储和获得大型对象的方法。
为了在一个BLOB域中存储大量的XML文档,使用者必须使用捆绑(binding)。捆绑是将程序代码中的数据与数据库中的域相互联系的过程。使用这一方法后,当改变数据库的时候,会有可能影响数据库的其他功能。
标签: