这是我试图解决的问题:我最近完成了数据层重新设计,允许我跨多个分片对数据库进行负载平衡.为了保持碎片平衡,我需要能够将数据从一个碎片迁移到另一个碎片,这涉及从碎片A复制到碎片B,然后从碎片A中删除记录.但是我有几个非常大的表,并且有许多外键指向它们,因此从表中删除单个记录可能需要一秒以上.
在某些情况下,我需要从表中删除数百万条记录,实际上只需要很长时间.
禁用外键不是一种选择.删除大批量的行也不是一种选择,因为这是一个生产应用程序,而大型删除会锁定太多资源,从而导致失败.我正在使用Sql Server,而且我知道分区表,但是对分区的限制(以及企业版的许可费用)是如此不切实际,以至于它们是不可能的.
当我开始研究这个问题时,我认为困难的部分是编写算法,该算法计算出如何从叶级别删除行到数据模型的顶部,以便在此过程中不会违反外键约束.但解决这个问题对我没有好处,因为删除需要在一夜之间消失的记录需要数周时间.
我已经建立了一种将数据标记为虚拟删除的方法,因此就应用程序而言,数据已经消失,但由于其庞大的大小,我仍在处理大型数据文件,大型备份和较慢的查询.表格.
有任何想法吗?我已经在这里阅读了较旧的相关帖子,但没有发现任何有用的信息.