在一个简单的.NET Windows应用程序中,数据应该存储在哪里?

4
假设你有一个管理图书馆并拥有自己数据的应用程序。那么这些数据需要被存储在某个地方。但是应该把数据存储在哪呢?
我的意思是,你要在客户机器上安装MySQL或SQL Server吗?这似乎就像用大炮打苍蝇一样。另一种选择是使用类似SQLite这样的东西,它不需要运行服务器,但使用起来非常麻烦(这只是我个人的偏好)。还有XML,但即使比使用SQLite还要更加困难。
那么你应该把数据存在哪里呢?安装SQL服务器?使用自己的数据格式?还有其他方式吗?

2
如果您正在使用自定义类来保存和在应用程序运行时执行数据操作,那么您可以考虑将这些类以二进制格式序列化到磁盘上。这种实现的最大问题是版本控制,但如果您的应用程序不需要考虑版本控制,那么这可能是将数据保存到磁盘上所需开销最小的方法。 - Cody Gray
您正在保存的数据量和格式是回答这个问题的关键信息。 - Dour High Arch
7个回答

3
我最初将我的想法作为评论发布,因为我不确定提供的类型、数量和未来数据需求是否足够。更不用说我并不是一个数据库专家,所以我的建议可能需要谨慎考虑,最终使用你最舒适的设计和维护方式。
话虽如此,我从不梦想使用任何类型的数据库来存储简单的客户端数据。复杂性和开销似乎不合理,特别是当 SQL 数据库的优势在这种类型的应用程序中几乎丧失时。如果你的数据集可以完全加载到 RAM 中,或者从保存的文件中按需加载数据的性能影响可以忽略不计,那么你可以尝试探索其他选项。我只会考虑将数据存储到客户端数据库中的情况是,如果绝对需要更快的数据检索时间,而这不能通过更智能/更高效的代码设计实现,或者如果应用程序可以从像 MySQL 这样的索引和搜索功能中受益。
相反,我发现自然而然地倾向于以树形结构组织数据。对于任何不需要极高速度或者不涉及特别复杂的数据类型的应用程序,我会选择XML序列化。查询和修改XML文件比使用具有相当小数据集的数据库要快得多,标准的Microsoft DOM库使得使用XML数据源非常简单。类实例的序列化已经内置于.NET Framework中,并让我想起了我多年前花费大量时间编写数据存储和检索代码时所希望拥有的这种功能。XML的另一个优点是,即使添加了功能,它也可以几乎消除与应用程序未来版本的兼容问题,并且如果必要,数据文件可以手动查看/编辑。可移植性也很好,允许其他程序轻松读取和导入您的数据,如果发生这种情况,您不会冒同时进行多个读/写操作可能导致数据库损坏的风险。最后,值得一提的是,我发现将自定义数据集序列化为XML文件在调试中非常有价值:我可以保存状态,然后打开XML文件查看存储的确切数据。
在 XML 不太适用的应用程序中(通常是因为我试图欺骗并保留加载到内存中的数据管理类的状态),我选择 二进制序列化。如果您正在寻找更快的访问时间,并且数据/数据结构的复杂性不像 XML 的分层格式那样自然,那么这也是一个很好的替代方案。这也内置在 .NET Framework 中,甚至比 XML 序列化更简单设置(如果可能的话)。这种类型的数据存储有两个主要缺点:无缝版本控制几乎变得不可能,并且您的数据以专有格式存储,用户或其他应用程序无法访问。如果版本控制不是您的应用程序的问题,则可能没有太多可担心的。然而,在我编写的一些数据管理应用程序中,后来添加功能时没有采取预防措施读取先前版本中创建的数据文件,我遭受了损失。
无论是二进制还是XML序列化,作为开发人员,我都喜欢使用多个离散文件来处理文档,这种灵活性给予了我很大的帮助。我可以在系统中将某些文件扩展名与我的应用程序相关联,使得用户可以更加直观地进行诸如备份之类的操作,而且用户可以轻松地与其他拥有我的应用程序的人交换创建在我的应用程序中的文件。你认为微软Word是如何变得如此流行的?

感谢您的详细回答。我猜 XML 是通常的解决方案。尽管它没有 SQL 服务器的所有功能,但仍具有可帮助进行 XPath 查询的功能...同时,迁移可以通过相当简单的脚本进行组织。而且“移动性”方面的观点真的很好 - 同步简单的事情不会有太多麻烦。但我想在这里提到另一种可能性(尽管它不是完整的“桌面”解决方案)- 在线数据存储+API。但同样,它并不完全符合最初的问题。 - Jefim
@Jefim:不客气。打了几分钟后我才意识到答案比预期的长得多。我完全同意有很多存储数据的方法。选择是困难的部分。 - Cody Gray

2

2
如果要存储的数据相对简单,我可能会选择 XML。
否则,这将是使用 SQL Server Compact Edition 的完美场景。

2

如果数据确实非常简单,可以使用序列化


2
我会选择另一种方式。如果数据非常复杂,我会选择序列化。 - Bobby

1
我会选择SQLite数据库,你可以将它保存在用户的主目录中。

0

我会选择db4o或SQL Server Compact Edition。


0

csv 文件?它有缺点,但您不需要使用库来解析它。而且它很快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接