每天将巨大的XML数据(> 1Gb)导入SQL Server 2008

时间:2009-11-20 18:24:12

标签: c# sql-server xml ssis xsd

我遇到了一个问题,我需要每天将大量XML(> 1Gb)导入SQL Server 2008。我现在拥有的是一个示例XML文件及其XML模式。 XML模式非常复杂,包含许多自定义的简单类型和复杂类型的元素,如:

<xs:element name="xxxx_url">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:anyURI">
                    <xs:attribute ref="target" use="optional"/>
                    <xs:attribute ref="abc" use="optional"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
</xs:element>

导入后,将实现WCF服务以检索存储在SQL Sever中的数据,例如搜索,检索等(只读操作)。

我能想到的实施步骤如下:

  1. 根据提供的XSD(手动)定义对象模型,对象模型将用于WCF服务返回值。
  2. 从提供的XSD(手动)定义数据库架构,估计架构大约有20-30个表。
  3. 创建一个SSIS包,每天将XML加载到数据库中。
  4. 创建一个从数据库读取的WCF服务,将数据填充到步骤1中定义的对象模型中,并将该对象返回给服务客户端。
  5. 问题是这些步骤涉及大量的手工工作。我必须逐行研究XSD,并将其转换为对象模型和数据库模式mannualy。

    我做了一些研究,有一些自动化工具可以将XSD转换为类,还可以将XSD转换为数据库模式。但是使用该工具从XSD转换而来的类非常混乱,并且转换为模式失败,因为它不符合MS数据集格式。

    我想知道这个问题是否有任何好的解决方案,以节省大量的手工工作?

    任何建议都表示赞赏!

5 个答案:

答案 0 :(得分:3)

在某些时候你必须进行转型。您是否这样做是将XML读入对象或读取表中的数据。工作应该完成一次,然后你只需要运行生成的过程。我看到的问题是:

  • XML非常大。

  • 您还没有将XSD映射到所需的架构。

映射是您必须要做的工作。如果您可以将XSD导入到表中,然后从这些临时表导入到您希望使用的模式,我认为它会表现最佳。使用XML文件会因其大小而给您带来问题。

所以我的建议是强制/捏造XML导入到表格结构的工作中。然后编写一个存储过程,将这些表中的数据“导入”到“真实”模式中。

Pat O

答案 1 :(得分:0)

简而言之,我们的解决方案需要一些工作 - 没有快速解决方案。

对于可伸缩性,我建议使用一种技术,允许您流式传输XML(a-la SAX),而不是尝试在RAM中加载和转换所有内容。出于SSIS的目的,将XML转换为对象图没有很多价值,因此请考虑以下任何机会:

  1. 使用具有多个输出的自定义脚本流式传输和遍历XML文档,然后使用其他SSIS组件转换结果数据。
  2. 将XML批量加载(流)到SQL Server的暂存实例中,然后从那里查询XML(不是一个很好的解决方案,但比1更容易),或者
  3. 将文档半碎成较小的块,将这些块大量加载到临时区域,然后使用XSD转换等单独处理它们。这为更好的并行性打开了大门。

答案 2 :(得分:0)

您是否拥有可以发布至少一个完整记录数据的示例数据?

另外,您是否可以访问用于创建此XML数据的源数据库? XML实际上并不是为这种大小的数据传输而设计的 - 使用每个表格的平面文件格式的数据会更容易。

答案 3 :(得分:0)

尝试将xml拆分为多一个文件,因为未来出现类似问题 由于上传错误,ýÿơƝƈï可能会出现在数据库中

答案 4 :(得分:0)

SQL Server内置了XML类型 - 它可以create tables from your schema

他们会帮助你吗?