大型XML parcel并使用属性或元素

时间:2008-11-11 19:06:23

标签: xml performance

我理解,属性与元素争论没有普遍的答案(我读过我在此看到的其他问题),但是对这种特殊情况的任何见解都将不胜感激。

在我们的案例中,我们将从记录系统接收大量的主数据和事务数据,并将其合并到我们自己的数据库中(每晚一次)。我们收到的信息基本上与我们的表中的记录一对一,所以例如客户列表(在我们的旧版本中):

<Custs>
  <Cust ID="101" LongName="Large customer" ShortName="LgCust" Loc="SE"/>
  <Cust ID="102" LongName="Small customer" ShortName="SmCust" Loc="NE"/>
  ....
</Custs>

然而,我们一直在讨论转移到更基于元素的结构的优点,例如:

<Custs>
  <Cust ID="101">
    <LongName>Large Customer</LongName>
    <ShortName>LgCust</ShortName>
    <Loc>SE</Loc>
  </Cust>
  <Cust ID="102">
    <LongName>Small Customer</LongName>
    <ShortName>SmCust</ShortName>
    <Loc>NE</Loc>
  </Cust>
  ....
</Custs>

因为文件太大我不认为我们会使用DOM解析器来尝试将它们加载到内存中,我们也不需要在文件中找到特定的项目。所以我的问题是:在这种情况下,当您需要考虑大量数据和性能需求时,一种形式(元素或属性)通常优先于另一种形式吗?

5 个答案:

答案 0 :(得分:1)

如果性能是唯一的要求,我认为你必须使用属性,因为它占用的空间更少。我认为这些元素没有任何优势。

答案 1 :(得分:1)

我已经将这两种方法都用于包含DOM和逐行读取器的非常大的文件。当然,您需要使用逐行读取器来获得非常大的文件的良好性能。除此之外,我的直觉是属性更有效但我没有硬数据来支持这种观点!

答案 2 :(得分:1)

如果某人一次向您提供1GB数据并且您完全关心性能,那么您应该重新检查使用XML作为传输格式的决定。您没有将数据解析为DOM,因此您无法真正利用XML为您提供的优势(例如)CSV - 确保格式良好,架构验证,转换,查询等。 / p>

现在你正在考虑转向一种格式,你要处理的数据中有一半是标记。这有什么意义呢?

我来自当时唯一的工具 - 你有一把锤子 - 你倾向于感知 - 所有问题 - 作为钉子学校的XML,甚至我不会为此使用XML。

答案 3 :(得分:1)

如果您计划在通过普通旧DTD处理之前验证xml,则更优选“属性方式”。没有规则来验证DTD语言中的一个元素内容,但可以将一些基本规则应用于属性值。

如果您计划使用XSD或根本不进行验证,那么我会选择最易读的形式,恕我直言就是“元素之路”。

无论XML来自何处,XML验证应该是处理任何XML的第一步。它使您的应用程序更安全,代码更小,因为在您的代码甚至打开XML数据之前进行了许多检查。 XSD应该是首选,因为它的语法允许检查偶数数据转换(即浮点数,元素或属性内容中的日期字段)。 con,它比普通的DTD文件复杂得多。

答案 4 :(得分:1)

以XML格式交换数据不是 必然 ,因为它是一个大型数据集。

但是,如果要交换非常大的XML文件,可能需要考虑在使用zip,GZIP等进行传输之前对其进行压缩,以节省时间和带宽。

如果要交换数据库信息,请考虑将信息格式化为SQL语句(甚至在发送之前压缩这些SQL文件);特别是如果你最终将XML转换成了什么。