使用首字母和增量对RDBMS中的数据集进行版本控制

时间:2011-04-29 23:21:01

标签: database versioning rdbms database-versioning

我正在使用首字母和增量来镜像远程数据集的系统。当一个初始值出现时,它会删除任何先前存在的内容,并大量插入新数据。当delta进入时,系统会进行大量工作以将其转换为更新,插入和删除。在长事务中处理缩写和增量以保持数据完整性。

不幸的是,当前的解决方案并没有很好地扩展。事务是如此之大和长期运行,以至于我们的RDBMS陷入了各种争用问题。此外,对于如何应用增量没有良好的审计跟踪,因此很难解决导致数据集的本地和远程版本不同步的问题。

一个想法是根本不在事务中运行首字母和增量,而是在每条记录上附加一个版本号,指示它来自哪个增量或初始值。成功加载初始值或增量后,可以提醒应用程序可以获得新版本的数据集。

这就留下了如何准确地从初始和增量组成数据集视图到给定版本的问题。 (Apple的TimeMachine做了类似的事情,使用文件系统上的硬链接来创建某个时间点的#34;查看"。

有没有人有解决此类问题或实施此特定解决方案的经验?

谢谢!

2 个答案:

答案 0 :(得分:0)

有一个作家和几个读者数据库。您将写入发送到一个数据库,并将其完全相同的更改传播到所有其他数据库。读者数据库最终将保持一致,更新的时间非常快。我已经在每天获得超过1M页面浏览量的环境中看到了这一点。它非常具有可扩展性。您甚至可以将硬件路由器放在所有读取数据库的前面,以对它们进行负载平衡。

答案 1 :(得分:0)

感谢那些尝试过的人。

对于最终到此处的其他人,我正在对一个解决方案进行基准测试,该解决方案将“dataset_version_id”和“dataset_version_verb”列添加到相关表中。然后,在检索特定记录时,使用存储过程内的相关子查询来检索当前dataset_version_id。如果记录的最新版本的dataset_version_verb为“delete”,则它将通过WHERE子句从结果中过滤掉。

到目前为止,这种方法的性能平均达到约80%,这对于我们的目的来说是可以接受的。