2011-08-10 36 views
10

我正在从服务接收XML数据。我收到的测试数据有大约300个XML节点,显然太多了,无法为MySQL数据库创建单独的行。将XML数据存储在MySQL数据库中的最佳方法,具有一些特定要求

问题是,我们理想地需要存储所有的数据,而且我们可能需要在将来某个时候再次引用数据 - 我们不能只处理一次并删除XML字符串。

将这些数据存储在MySQL数据库中的最佳方式是什么?

我预测在几个月内的预测速度下,如果我们要以TEXT格式存储原始XML数据,数据库可能会增长到500MB左右。从长远来看,这感觉不切实际。

回答

14

您可以创建一个blob列(即mediumtext列)。您可以将XML压缩成XML,然后将其存储在MySQL中,而不是将纯粹的XML作为字符串插入到数据库中。

当你从MySQL读取时,你再次解压。由于XML是文本,您将获得非常高的压缩率(接近80%的压缩率)。思想过程是,磁盘IO比压缩/非压缩需要更长的时间,主要是处理器边界。

的缺点是,你将不再能够查询或使用SQL做全文搜索....

+0

谢谢@Srikar,我发现这个解决方案完全符合我的要求。我只需要在数据库中存储xml文档以供将来参考,不会对存储的XML文档进行查询。我唯一担心的是随着时间的推移,存储XML文件的存储需求可能会急剧增加。为此,我将在存储到数据库之前压缩文件。 – Anuruddha

2

最好的方法是不要将XML存储在数据库中,但我有关于该特定问题的历史记录。

只需将其存储为TEXT。对于MySql来说,500 MB没有任何用处,尤其是对于TEXT数据类型,因为它们不存储在行缓冲区中。

4

尝试使用LOAD XML命令。这个声明在MySQL 5.5中可用。

3

很大程度上取决于您想要如何处理数据 - 如果您想搜索XML中的内容,那么decomposing it into a tree将提供更好的查询性能。

500Mb并不是一个大量的数据 - 问题都是关于如何引用它并搜索它。如果仅仅是为了归档目的,或者你永远不需要在XML内部搜索,然后压缩它(例如)base64编码将把它减少到小于80Mb。

相关问题