将大数据从xml文件迁移到数据库

Posted

技术标签:

【中文标题】将大数据从xml文件迁移到数据库【英文标题】:migrate the large data from xml file to the database 【发布时间】:2011-07-28 08:24:32 【问题描述】:

问:

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

我做的是:

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

例如:

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

courses , teachers

两个表(数据库)

courses , teachers.

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

问题是:

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

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

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

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

    This IfxTransaction has completed; it is no longer usable,没有 一个修复它。

    我的团队领导告诉我不要使用交易,因为它会 锁定表,许多用户使用这些表。他想要别的 机制。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

    http://blogs.msdn.com/b/nikhilsi/archive/2008/06/11/bulk-insert-into-sql-from-c-app.aspx http://www.dotnetcurry.com/ShowArticle.aspx?ID=323

【讨论】:

【参考方案3】:

如果我理解正确,您正在执行批量插入。为什么不使用 Spring Batch,它具有 Restart from last failure point 、 Retry 、 Chunking 、 Partitioning of data 等功能......

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

【讨论】:

以上是关于将大数据从xml文件迁移到数据库的主要内容,如果未能解决你的问题,请参考以下文章

Grails 数据库迁移:将 xml/groovy diff 转换为 sql 脚本文件

将大表从 MySql 迁移到 MsSql

Bamboo 到 Jenkins 迁移:我可以访问和比较 XML 配置文件吗?

将 XML 文件打开到数据网格视图算法中,数据表不支持从 xml 进行模式推断

在Python中将一些数据从txt文件附加到特定的XML标记到xml

如何从数据库表中生成xml文件?