2

首先,让我指出我读过关于数据库版本控制的所有文章,但这不完全是我正在寻找的东西,但我不能提出更好的标题(这里“全部”这个词是关键)。SQL Server中的完整数据库版本

我有一个'编译好的数据库',它包含一个公共交通路线规划器的所有类型的优化记录和统计信息,它是通过另一个数据库中的程序生成的。编译的数据库在活动时不会更改,用户活动监视和缓存除外。有些表格包含2-3万条记录。

一旦输入数据库发生变化,此编译的数据库就会完全更新。因此,任何新的数据库版本都不以任何方式与任何其他以前的版本交互。但是我希望单独存储每个版本,并且如果用户需要,可以从程序中使用它(将它想像为公共交通地图的历史记录)。

唯一合理的方法是简单地为每个版本创建不同的物理数据库,这既不硬也不错,但是我问你是否知道任何机制对完整数据库进行版本控制(而不仅仅是数据库中的部分数据,比如其他职位都在问),目的是使整个事情更加合乎逻辑和干净。

我正在使用SQL Server 2012,但可能在服务器上它将是2008 R2。

如果您想将版本化数据存储在同一个数据库中(并且在每个表中添加VersionID列),请将其忽略掉,因为在一个有2-300,000条记录的表上,有10个版本(这些版本会在少于3个月)将意味着300多万条记录,其中只有30万条将被使用,所以,绝对不会!

+0

VersionID列不会很好,因为推测新版本可能有不同的模式。我可能会像你最初的预感一样使用单独的数据库。 – 2012-08-15 21:00:43

+0

同意模式更改的评论。但为什么你认为有一个版本列(因为大小)是一个问题? – 2012-08-15 21:10:46

+0

仅仅是逆向的,如果模式在数据的不同“版本”之间是相同的,为什么不把它们都放在同一个数据库中呢?你可以使用表分区。哎呀......即使他们有不同的模式,他们也可能都在同一个数据库中,只要有不同的表名即可激活你的辣椒。对您的数据库模型有什么异议? – 2012-08-15 21:28:59

回答

2

我认为多数据库方法是好的。您可以尝试执行存储级重复数据删除。这可能会大大减少存储使用量。只要确保您创建新数据库作为备份并从旧数据库恢复,以使它们大部分是字节相同的。

+0

重复数据删除是一种减少已用空间的解决方案,但我认为这不是一个真正的问题,因为即使我拥有超过100,000条记录的表格,它们主要是小型和smallint,所以数据库不会超过50-100 mb。我主要感兴趣的是将数据库作为单独的实体“链接”,但共享一个共同的模式。 – Tiborg 2012-08-15 22:04:07

+0

好吧,这是不可能的跨数据库。您可以将多个版本保存为同一个表的单独分区。您可以引入分区键“VersionID smallint not null”。如果您始终通过VersionID进行访问,Perf将与现在一样。 – usr 2012-08-15 22:07:25

相关问题