2011-10-31 34 views
1

我被要求使用一个相当锁定的内容管理系统来创建一个人造博客。我没有能力将数据库用于内容存储,因此我正在挑战使用XML来存储有关文章的数据;基本的东西,如日期,标题,摘录,标签和内容,并使用jQuery来渲染页面。将XML用于数据存储

文章篇幅不会太长,但是有没有创建这样一个应用程序的优点/缺点?

+0

这对你来说不太可能是个问题,但我们最近在自己的工作中开发了一个类似这样的解决方案,并遇到了一个BIG问题,因为我们忘记了我们的生产服务器在六台机器上进行了负载平衡。用户会在一台服务器上更新XML,然后重新加载,然后感到困惑,因为他们的XML现在由另一台机器提供服务,并且它们的更改不在其中。 (最后,通过将其保存到测试服务器上的XML文件来解决它,但我们都同意,如果我们有选择的话,数据库本来就是要走的路。) – Blazemonger

回答

1

虽然我是XML的粉丝,这似乎是有点下意识的反应,从而在所有使用此其他可能的格式涉及数据存储/传递。一个好的数据库总是一个更好的解决方案,但如果这是不可能的,只要尽量避免将所有东西都转换成一个巨大的XML文件。为每篇文章存储一个单独的文件,其中包含所需的元数据(日期,标题,标签......)将是一个好的开始。或者,文章内容可以嵌入到XML中。因为XML最初是用来定义标记语言的,所以它会感觉很好,尽管现在看起来你觉得它更经常用于数据结构。

许多较小的XML文件,然后可能是另一个做一些索引,将是要走的路。这至少会在数据库中进行的分区和索引附近。无论你做什么,都不会创建一个或几个巨大的XML文档。否则,有一天你会回到这里,询问其中一个“帮助我解析1个GiB XML文档并耗尽内存”的问题:)

Hunter.ross'的建议看起来非常好。

1

您绝对可以将XML用于存储目的,但这样做并不昂贵,而且实施起来很困难。

因为你还没有提到你的平台,我假设你正在使用.NET!使用XElement,XML的使用情况不仅仅比数据库查询更复杂。

另一方面,你想要达到的目标是在你的表现中创造出巨大的时间。如果您不考虑将整个XML文件加载到内存中,那么每次您想要保存某些内容时都会重写您的XML文件,并重新进行检索。如果这样做,一旦XML文件开始变大,您将很快得到“内存不足”异常。

使用XML的实现成本相对较高,因为您必须通过手动过程来获取从XML中获取数据的手动过程,其中简单的数据库查询将执行相同的操作。

如果考虑除XML之外的其他选择,我建议您使用SQLite,您也可以阅读when to use SQLite。你不需要任何数据库安装,并且它是可移植的。它只是一个存储在你的服务器上的二进制文件,SQLite几乎为每个平台都提供了API,并且它有各种各样的包装器。这更像是在数据文件上执行数据库查询。

SQLite是一样的SQL Server,MySQL的等其他关系数据库,您就可以执行各种SQL查询,你知道的,你也可以一起Entity FrameworkNHibernate或任何其他ORMs使用。

性能不会像SQL Server/MySQL,但你可以用这个SQLite服务器的数以千计的您的网站的访问者。