2010-03-10 271 views
1

在MS-SQL Server 2008上有一个数据库,它逐年增长很多。保存数据库历史

我想要做的是:获取一些数据并存储在一个XML文件中,并将该文件存储在一个表中,在同一个数据库中。

这是个好主意吗?你有什么主意吗?

谢谢。

+0

基本上你想要达到什么目的?它是为了节省磁盘空间吗? – hallie 2010-03-10 13:04:01

+0

是的,这是为了节省一些磁盘空间 – rpf 2010-03-10 14:37:05

回答

2

的标准方法是建立一个新的数据库(可能在不同的机器上),这将是你存档数据库和调度运行存储过程的记录移到存档数据库(仅记录早说2年为例或适合您的业务问题)。您将不得不复制表格的结构并保持两个数据库同步。你可以在你的sp中只包含最大的表,通常只有少数表会导致问题。

这样,您仍然可以以适当的方式访问您的归档数据并对其运行查询。将数据存储在数据库中的xml对我来说不是一个好主意,因为如果您需要旧数据,您将遇到困难时期。它也会给你带来巨大的磁盘空间。

+1

+1,关键点:'有更好的方法,使用不同的数据库','以XML存储使得你的数据变得困难'并且'XML将使用更多的磁盘空间' – 2010-03-10 13:51:20

+0

如果我在存储到数据库之前压缩XML文件会怎么样?更高效吗? – rpf 2010-03-10 14:44:08

+0

数据存储会更好,但如果您需要返回数据,则会变成噩梦。我认为没有理由这样做。 – anthares 2010-03-10 14:47:37

0

XML本质上是一种详细的数据存储方式,而不是本地存储在表列/行结构中的方式。

例如,假设只存储用户的一个简单的表...

<Users> 
    <User> 
    <UserID>1</UserID> 
    <Name>Joe Smith</Name> 
    <DOB>24.02.1973</DOB> 
    </User> 
    <User> 
    <UserID>2</UserID> 
    <Name>Joleen Smith</Name> 
    <DOB>13.10.1962</DOB> 
    </User> 
    ... 
    ... 

你会好起来使您的架构的副本,并导出归档数据从这个第二个副本。这样,你仍然可以查询它,如果它是XML,那么你将无法做到(容易)。

+0

尽管我同意XML比仅以常规行/列存储数据需要更多空间,但数据库不仅仅存储所有冗长的重复性XML标记。如果您要在数据库文件上使用十六进制编辑器并查看一些XML数据,则会看到它正在使用某种编码方案来节省一些空间。 – 2010-03-10 13:58:01

+0

有意思的是,我忘记了SQL2008 SQL数据类型,也没有意识到使用它可以减少数据占用量。好喊。但是,我的建议仍然是一样的,不要使用XML,为归档数据使用单独的DB架构/副本。 – CResults 2010-03-10 14:39:28