将大数据从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 脚本文件
Bamboo 到 Jenkins 迁移:我可以访问和比较 XML 配置文件吗?
将 XML 文件打开到数据网格视图算法中,数据表不支持从 xml 进行模式推断