【问题标题】:Which is better: Parsing big data each time from the DB or caching the result?哪个更好:每次从数据库解析大数据还是缓存结果?
【发布时间】:2013-04-17 03:08:48
【问题描述】:

我对系统性能有疑问。在 DB 表中,每条记录都会有一个很大的 XML 数据。我担心的是,如果我每次都应该从数据库中解析 XML 数据以获取 XML 中的属性和信息。另一种选择可能是解析 XML 一次并捕获它们。 XML 大小平均为 100KB,将有 10^10 条记录。如何解决这个空间与计算性能问题?我的猜测是捕捉结果(XML 中的重要属性)。因为每次查询解析 10^10 条记录并不是一件容易的事。加上解析后的属性可以作为索引。

【问题讨论】:

  • 能否在更新时解析并保存为普通数据,方便查询?
  • 哪个数据库?如果使用 SQL Server,则使用类型为 xml 的列。这将在第一次输入数据时对其进行解析,之后它将采用“二进制 XML”格式——既快速又紧凑。
  • 是的。我认为这是一个好方法。 XML 中可能有 100 个属性,重要的是 20 个。我想在表格列中添加这 20 个属性。当记录中的 XML 列发生变化时,解析 XML 并更新 20 列。这个设计怎么样?
  • 我想我会使用 Informix 数据库。
  • 为什么不用您的数据在您的系统上进行衡量,而不是让我们猜测每个选项的性能?

标签: sql database performance


【解决方案1】:

如果您要解析所有每个查询,您无疑应该缓存结果,也许将完整生成的产品放入单个数据库字段或文件中以供将来使用,或者最后直到某些东西改变了,就像论坛系统一样。

对大量数据重复一个昂贵的过程,知道你总是会得到相同的结果是真正的资源浪费。

【讨论】:

    【解决方案2】:

    如果您打算使用 XML 中的某些属性进行索引,最好将它们作为列添加到表中。

    关于解析 XML,100kb 几乎不是会影响性能的大小。此外,您可以在获取记录时读取 XML(按原样)并将其存储在字符串中,并仅在您想要显示/使用这些附加属性时对其进行解析。

    【讨论】:

    • 请注意,SQL Server 还支持xml 列上的 XML 索引。您可以将数据保留为xml,同时按属性进行索引。
    • 我当前的设计是将 XML 存储在一个字符串中,并在 XML 数据更新时捕获表字段中的重要属性。如果 Infomix 不支持 SQL Server 那样的属性,我将索引这些从 XML 解析的重要属性。
    【解决方案3】:

    您没有提到最佳选择:解析 XML 并将其数据存储在它们所属的表中。如果您确实需要逐字逐句的原始 XML,请将其保留为 blob,否则请忽略它。

    (顺便说一下,我认为您的意思是 cache,而不是 catch。)

    【讨论】:

    • 是的,这可能是最佳实践。但它有一些困难,主要是因为 XML 非常复杂,除了这些重要属性之外,我很少关心其他任何事情。以防万一我仍然喜欢存储它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多