我的任务是加载新的数据集(用XML文件编写),然后将其与“旧”集(也用XML表)进行比较。所有更改都写入另一个文件。
我的程序将新旧文件加载到两个数据集中,然后一行一行地将新集合中的主键与旧集合进行比较。当我找到相应的行时,我检查所有字段,如果与旧字段有差异,我将其写入第三组,然后将其设置为文件。
现在我使用:
newDS.ReadXml("data.xml");
oldDS.ReadXml("old.xml");
然后我只找到具有相应主键的行并比较其他字段。它对小文件非常有用。
问题是我的文件最多可能有4GB左右。如果我的新旧数据那么大,那么将8GB数据加载到内存中就很成问题了。
我想在部分中加载我的数据,但为了比较我需要整个旧数据(或者如何从XML文件中获取具有相应主键的特定行?)。
另一个问题是我不知道XML文件的结构。它由用户定义。
使用这么大的文件的最佳方法是什么?我想过使用LINQ to XML,但我不知道它是否有可以帮助解决我的问题的选项。也许最好留下XML并使用不同的东西?
答案 0 :(得分:-2)
你绝对应该留下XML。对于这样大小的数据集来说,它不是一个好工具,特别是如果数据集由许多具有相同结构的“记录”组成。 4GB文件不仅难以处理,而且几乎任何用于加载和解析它们的东西都将使用比文件大小更多的内存开销。
我建议您查看涉及SQL数据库的解决方案,但我不知道如何分析4GB文件,其中“您不知道文件的结构”,因为“它由用户定义“。如果您不理解文件的结构,您会将“行”和“主键”赋予什么意义?你知道关于XML的做什么?
这可能是有道理的,例如。读取一个文件,将主键存储在一定范围内的所有记录,对另一个文件执行相同操作,对该数据进行比较,然后继续。通过对密钥空间进行分段,您可以确保始终找到匹配项(如果存在)。以同样的方式将文件分成更小的块也是有意义的(尽管我仍然认为这种大的XML存储通常是不合适的)。你能再谈一谈这个问题吗?