2

问:

两周前我遇到了以下问题,考虑到性能问题和数据完整性,我不知道如何处理它。

我要做的是:

我想将XML 文件中的数据迁移到我数据库中的类似表中

例如 :

  • 我有两个节点(XML 文件):

    courses,teachers

  • 两张表(数据库)

    courses, teachers.

我允许用户将 XML 文件上传到我的服务器上的一个文件夹,然后我开始读取 XML 文件并将数据插入到我的数据库中。

问题是:

如果在插入操作过程中发生故障,我想删除所有表中的所有插入记录。(或回滚)。

我开始思考transaction,每个实体的插入都会通过事务来执行,但我面临两个问题:

  1. 我应该将所有实体的所有插入放在一个事务中还是一个实体放在事务中?(所有实体数据必须全部插入或根本不插入)每个上传者。

  2. 当我有大量记录时说(1500条记录)。出现以下异常:

    此 IfxTransaction 已完成;它不再可用,没有人修复它。

  3. 我的团队负责人告诉我不要使用事务,因为它会锁定表并且许多用户使用这些表。他想要一些其他的机制。

请我想解决我的问题(详细说明),如何处理这种情况并维护性能问题以及数据完整性和一致性。

4

3 回答 3

2

这是我们在同一问题中使用的一种机制,开始将数据保存在临时表中,如果插入临时表后没有异常,则运行将这些临时表的内容复制到真实表的存储过程,然后之后从临时表中删除 *。这样,您在使用事务机制时就不会锁定对表的访问。还有另一种机制,但如果使用它,则必须重新考虑所有数据库结构,它称为 CQRS(对于 .NET,有一个称为 NCQRS 的 API)

于 2011-08-24T17:25:31.643 回答
1

如果我理解正确,您正在执行批量插入。为什么不使用 Spring Batch,它具有从上一个故障点重新启动、重试、分块、数据分区等功能...

我知道您已经标记了 asp.net ,但是数据的加载可以以独立于技术的方式和解耦的方式发生。不是吗?

于 2011-08-30T07:02:21.553 回答
1

我建议使用 SqlBulkCopy。您可以谷歌,或阅读以下两篇文章:

  1. http://blogs.msdn.com/b/nikhilsi/archive/2008/06/11/bulk-insert-into-sql-from-c-app.aspx
  2. http://www.dotnetcurry.com/ShowArticle.aspx?ID=323
于 2011-07-28T16:50:57.887 回答