存储设置:XML与SQLite?

我目前正在编写一个IRC客户端,我一直在试图找出一种存储服务器设置的好方法。 基本上是大多数IRC客户端拥有的大型网络及其服务器列表。

我决定使用SQLite,但后来我想让这个列表以XML格式(也许是权威的)在线免费提供,供其他IRC应用程序使用。 所以现在我可以以相同的格式在本地存储设置。

我对ADO.NET或XML的经验很少,所以我不确定他们会在这种情况下如何比较。

是否更容易以编程方式工作? 一个更快吗? 有关系吗?

这是一个比你意识到的更模糊的问题。 “设置”可以包含很多东西。

有一个很好的.NET基础架构来处理配置文件中的应用程序设置。 通常,这些作为全局Settings对象的属性暴露给您的程序; System.Configuration命名空间中的类负责读取和保存它们,Visual Studio中内置了一些工具来自动生成处理它们的代码。 此基础结构支持的数据类型之一是StringCollection ,因此您可以使用它来存储服务器列表。

但是对于大量的服务器列表,由于几个原因,这不是我的首选。 我希望列表中的元素实际上是元组(例如主机名,端口,描述),而不是简单的字符串,在这种情况下,您最终必须格式化并解析数据以将其转换为StringCollection ,并且这通常表明你应该做其他事情。 此外,应用程序设置是只读的(至少在Vista下),虽然您可以设置用户范围以使其保持可持续性,但这会导致您在提交之前想要了解的路径。

所以,我要考虑的另一件事是:您的服务器列表只是一个列表,还是有一个内部对象模型代表它? 在后一种情况下,我可能会考虑使用XML序列化来存储和检索对象。 (我在应用程序配置文件中保留的唯一内容是序列化目标文件的路径。)我这样做是因为将简单对象序列化和反序列化为XML非常容易; 您不必关心设计和测试正确的序列化格式,因为这些工具适合您。

我使用数据库的主要原因是,如果我的程序执行一系列操作,其结果需要primefaces且持久,或者如果由于某种原因我不希望我的所有数据同时存在于内存中。 如果每次X发生,我想要它的永久记录,这导致我朝着使用数据库的方向。 通常,您不希望将XML序列化用于此类事务,因为如果要将所有对象保存到单个物理文件中,则无法实际序列化一个对象。 (虽然简单地序列化整个对象模型以保存一个更改当然并不疯狂。事实上,这正是我公司的产品所做的,它指向另一种我不会使用数据库的情况:如果数据的模式是经常变化。)

我个人会使用XML进行设置 – 已经构建了.NET来实现这一点,因此有许多内置工具可以将您的设置存储在XML配置文件中。

如果你想使用自定义模式(无论是XML还是数据库)来存储设置,那么我会说XML或SQLite也可以正常工作,因为你应该在数据存储周围使用一个不错的API。

每个工具都有自己的权利

我知道,有很多关于XML的炒作。 但是您应该看到,XML基本上是一种交换格式 – 而不是存储格式(除非您使用本机XML-Database为您提供更多选项 – 但也可能会增加一些令人头疼的问题)。

当您的配置相当小(比如少于10.000条记录)时,您可能会使用XML并且没问题。 您将把整个东西加载到内存中并访问那里的条目。 完成。

但是当您的配置如此之大,以至于您不想完全加载它时,而不是重新考虑您的决定并继续使用SQLite,这使您可以选择动态加载您需要的配置部分。

您还可以提供一个从DB内容创建XML文件的小工具 – 从DB创建XML是一项相当简单的任务。

看起来你在这里有两个独立的应用程序:一个Web服务器和一个桌面客户端(因为传统上运行这些东西),每个都有自己的存储需求。

在服务器端:使用关系数据存储,而不是Xml。 基本上在某些时候,您需要将用户数据与服务器上的其他用户数据分开。 XML不是一个很好的存储。

在客户端:它并不重要。 Xml可能更容易操作。 并且不要认为因为您在一个设置中使用一种技术,所以必须在另一种设置中使用它。