问:
两周前我遇到了以下问题,我不知道如何处理性能问题,考虑数据完整性。
我的工作是:
我想将数据从 XML文件迁移到我数据库中类似的表。
例如:
我有两个节点(XML文件):
courses
,teachers
两个表(数据库)
courses
,teachers
。
我允许用户将XML文件上传到我服务器上的文件夹,然后我开始读取XML文件并将数据插入到我的数据库中。
问题是:
如果在插入操作期间发生某些故障,我想删除所有表中的所有插入记录。(或回滚)。
我开始考虑transaction
,每个实体的插入都将通过交易执行,但我面临两个问题:
我应该将所有实体的所有插入放在一个事务中还是 每个上传者在一个实体中一个一个实体?(所有实体数据必须全部插入或根本不插入)。
当我有大量的记录说(1500记录)。以下 异常出现:
This IfxTransaction has completed; it is no longer usable,无 一个修理它。
我的团队负责人告诉我不要使用交易,因为它会 锁定表,许多用户使用这些表。他想要其他一些 机制。
请问我想解决我的问题(详细解释),如何处理这种情况并保持性能问题以及数据的完整性和一致性。
答案 0 :(得分:2)
这是我们在同一个问题中使用的机制,开始在临时表中保存数据,如果在插入临时表后没有执行,则运行将这些临时表的内容复制到实际的存储过程表,然后从临时表中删除*。 这样,在使用事务机制时,您不会锁定对表的访问。 还有另一种机制,但如果您使用它,则必须重新考虑所有数据库结构,它称为CQRS(对于.NET,有一个名为NCQRS的API)
答案 1 :(得分:1)
我建议使用SqlBulkCopy。你可以谷歌,或阅读这两篇文章:
答案 2 :(得分:1)
如果我理解正确,你正在进行批量插入。为什么不使用Spring Batch,它具有从上次故障点重启的功能,重试,分块,数据分区等......
我知道你已经标记了asp.net,但是数据加载可以以独立于技术的方式进行,并且可以解耦。不是吗?