使用缩写和增量在RDBMS中对数据集进行版本控制
-
27-10-2019 - |
题
我正在使用首字母和增量来镜像远程数据集的系统上。出现首字母缩写时,它会批量删除先前存在的任何内容,然后批量插入新数据。引入增量后,系统将进行大量工作以将其转换为更新,插入和删除。在长事务中处理首字母和增量,以维护数据完整性。
不幸的是,当前解决方案的伸缩性不是很好。事务是如此之大且运行时间长,以至于我们的RDBMS陷入各种争用问题。另外,对于增量的应用方式也没有很好的审核线索,这使得很难对导致数据集的本地和远程版本不同步的问题进行故障排除。
一个想法是根本不运行事务中的缩写和增量,而是在每个记录上附加一个版本号,以指示它来自哪个增量或缩写。成功加载初始值或增量后,可以提醒应用程序有可用的新版本的数据集。
这只剩下一个问题,即如何精确地组成一个数据集的视图,使其从初始值和增量到给定的版本。 (Apple的TimeMachine做类似的事情,使用文件系统上的硬链接创建特定时间点的“视图”。)
有人有解决此类问题或实施特定解决方案的经验吗?
谢谢!
解决方案 2
感谢那些尝试过的人。
对于到此为止的其他人,我正在对一个解决方案进行基准测试,该解决方案将“ dataset_version_id”和“ dataset_version_verb”列添加到每个有问题的表中。然后,在检索特定记录时,将使用存储过程内的相关子查询来检索当前的dataset_version_id。如果该记录的最新版本具有“ delete”的dataset_version_verb,则将通过WHERE子句将其从结果中过滤出来。
到目前为止,这种方法的平均效果约为80%,对于我们的目的而言可能是可以接受的。
其他提示
有一个作家和几个读者数据库。您将写入发送到一个数据库,并将其完全相同的更改传播到所有其他数据库。阅读器数据库最终将保持一致,并且更新时间非常快。我已经看到每天在超过1M的页面浏览量的环境中完成此操作。它具有很好的可扩展性。您甚至可以在所有读取数据库的前面放置一个硬件路由器,以对它们进行负载均衡。