我们有一个体系结构,在将xml批处理文件导出到生产环境之前,我们使用ssis将数据从xml批处理文件提取到一个临时数据库中进行验证。
我们在某种程度上控制了XML格式,我被要求确定XML批处理文件应该包含的最大记录数。基于xml模式和一些示例数据,我可以估计平均记录大小并从中进行一些预测。
但是,从另一个角度来看,我想了解一下ssis在处理大型xml文件时的技术限制。
我知道ssis将扁平化xml文档并将其转换为自己的表格式内存表示,因此ram成为一个明显的限制因素,但比例是多少?
你能说,ssis需要的内存至少是你试图加载的文件大小的2.5倍吗?假设我有一个32GB的盒子专用于这个数据加载功能,那么我的XML文件可以有多大?
我知道可能还包括其他因素,比如模式的复杂性、嵌套元素的数量等等,但是最好有一个起点。

最佳答案

XML源不会将整个文档加载到内存中,而是在从XML文件读取数据时将数据流输出。因此,如果您正在读取XML并将其写入文本文件,而不需要进行复杂的转换,那么您需要的内存相对较少。另外,当XML文件增长时,所需的内存量(在某个阈值之后)将停止增长,因此您可以处理可能不受限制的XML文件。
这个家伙导出了整个维基百科内容(20GB的XML文件):
http://www.ideaexcursion.com/2009/01/26/import-wikipedia-articles-into-sql-server-with-ssis/
当然,您可能会对这些数据做一些处理,例如加入来自xml源的多个流。根据您的需要,您可能需要大量内存,因为某些转换确实会将整个数据集保留在内存中,或者如果您有足够的内存来存储整个数据集,则性能会更好。

07-24 09:47
查看更多