XML文件中的数据:一个大文件还是多个小文件?

时间:2009-08-21 11:49:51

标签: xml performance parsing

我目前正在开发一个基于XML的CMS,它将数据保存在名为“items”的块中。这些可以在网站上用来显示内容。

现在,我现在每个项目都有一个单独的XML文件。由于该网站上的大多数页面使用了大约三到四个这些项目,因此一个相当小的网站,例如20页有大约100个不同的项目。因此,我/ xml / items文件夹中的xml文件数量相同。

最好将所有数据存储在一个单独的items.xml文件中,还是我当前的方法更好?

Pro Single File - xml / items.xml

  • 较少的文件(也许开始成为一个 谈论时的表现问题 成千上万的物品 网站。)
  • 减少磁盘访问量(特别是在 管理所有的清单 项)

Pro多个文件 - xml / items / * .xml

  • 访问单个项目的速度更快 因为只需要一个小文件 解析

6 个答案:

答案 0 :(得分:4)

我认为你当前的approch是两种选择中的更好。鉴于您的用户使用您创建的界面来编辑文件,他们不会在包含许多文件的目录中搜索文件。

鉴于破坏文件所需的内容,许多文件的优点,是你不会受到重创,但只能击中单个文件。锁定也更好 - 因为一次锁定文件而不是完整的“主XML文件”。

答案 1 :(得分:4)

这里有许多深思熟虑的回应。

1个大文件或许多小文件应该可以正常工作。需要考虑的领域更有可能围绕管理和维护。如果它很难维护项目,因为它们在一堆不同的文件中,那么也许一个大文件就是答案。

一些想法:

  • 一个大文件意味着单个错误(无效的xml)可能会占用整个应用程序,而许多文件只会影响使用该项目的页面。通过不在生产中编辑数据来缓解。

  • 每个服务器都有自己的项目文件结构吗?或者这些项目是否位于一个高可用性份额中?您放置的数据副本越多,您就越有可能在特定服务器上使数据不同步,这可能很难追踪。

  • 无论您选择1个文件还是多个文件,您都可以解决/抽象代码中的任何数据访问(锁定,搜索等)问题。你需要编写更多代码来执行诸如锁定,搜索之类的操作,以及可能需要调试的错误。

  • 如果性能开始出现问题,请考虑将项目缓存一段时间以避免光盘访问。

你可能想看看Scott Hanselman的dasBlog blogging engine。我认为它本质上是一个基于xml /文本文件的内容管理系统,采用了许多文件方法,可能对查看有帮助。

答案 2 :(得分:2)

您的用户是直接使用XML文件还是只是存储数据的方法?

如果是后者,则是技术问题,磁盘访问和解析速度是相关问题。

如果是前者,最重要的问题是对用户最有意义的问题。然后,您可以使用缓存等解决技术问题。 因此,假设用户直接使用XML文件,您必须问自己是否有助于或阻碍用户拥有多个文件或单个文件。如果每个项目描述一个单独的组件,并且与其他项目很少或没有关系,我会将它们放在单独的文件中。 如果您创建包含大量不相关项目的单个文件,则用户将花费大量时间搜索相关项目。如果您有多个文件,他可以使用文件名立即选择正确的文件。

答案 3 :(得分:1)

我认为这取决于您的服务器有多少内存; XML文件有多大;以及你正在使用什么解析器。如果服务器有足够的内存,那么我认为一个XML文件会更好,因为它可以缓存在内存中然后很容易解析。我认为这将超过打开/读取许多文件的IO开销。

此外,它将来会更加可维护和灵活。例如,如果您想生成所有项目的列表,或者可能要搜索它们,那么使用大量单独的XML文件将非常困难。使用数据库类比 - 如果您在数据库中有共同的页面数据,您会为每个页面创建一个单独的表吗?当然不是。

答案 4 :(得分:0)

如果您不是简单地使用数据库路径,对我来说,这显然很明显,我建议使用几个文件。主要原因是,如果您只使用一个文件并更新它,那么您的应用程序需要在再次显示页面时解析整个文件,这是一件坏事(tm)。

答案 5 :(得分:0)

如果将所有xml文档存储在一个文件中,并将索引文件映射到(文档)文件中的每个文档的名称,则会得到:

  • 少文件
  • 减少磁盘访问量
  • 更快地访问单个文档

老实说,我认为这种方法不会改善页面的加载时间,值得付出努力。您说可能有100个项目,如果您在准备页面时不需要大部分项目,那么将所有这些项目存储在一个文档中会增加页面的加载时间(至少会增加对一个文档的访问时间) 。我要将每个项目存储在一个文档中,每个文档存储在一个文件中,所有文件都存储在一个目录中。假设(类似于我建议的方法)该目录是一个索引,它将每个文档的名称(文件名)映射到磁盘上的起始位置(文件路径)。