我正在开发C#应用程序,并希望确保我选择适合这些规格的数据存储的最佳选择。

该程序可以具有无限量的数据,但是该数据只能由使用该应用程序的单个用户使用。每次关闭应用程序时,我都需要保存数据,并且在启动应用程序时需要加载它。

我已经查看了数据库,但是不确定哪些最适合我的需求。另外,我想知道我是否完全需要一个数据库给定上述规格,也许我应该只使用实现序列化和避难所化的二进制文件/XML文件。

请把我指向正确的方向!

谢谢,OC

编辑:我忘记包括的一个重要因素是允许一个用户保存他/她输入的所有条目,并将其导出到可以在应用程序/用户之间轻松共享的外部文件。

有帮助吗?

解决方案

在不了解您的特定应用程序的情况下,很难(对于我们来说)说数据库是否是正确的选择。 但是,您可以使用一些经验法则来帮助指导您的决定。

数据库可能是一个不错的选择:

  • 数据可以由多个用户使用。
  • 当可能的活动可能正确存储时。
  • 当收集到的数据并非全部都需要一次加载到内存中。
  • 当您希望能够以复杂的方式查询或报告数据时。
  • 当您想对使用标准工具存储的数据具有透明度时。
  • 当更改大部分是本地化而不是要求重建整个数据存储时。
  • 当您的数据与关系相关时(而不是说层次表示)。

数据库可能不是最好的选择:

  • 您只为一个用户服务。
  • 几乎没有并发活动,保存更改时必须重新创建整个数据模型。
  • 当数据将很少,并且一次将其加载到内存中。
  • 当您的数据分层或难以建模时。
  • 当您的应用程序以文档为导向时,并将文档(文件)发送给其他用户。
  • 当您存储的数据中散布着大量二进制数据时。
  • 当您想避免依赖第三方工具或服务时。
  • 当数据模型的结构可能经常更改时。

这些都是经验法则...没有任何单一条件决定是否使用数据库。您必须检查所有考虑因素,并决定使用数据库是否会给您足够的好处 - 不给您带来足够的好处。

在许多环境中(例如iPhone),该平台上有一个内置数据库层。还有一些工具(例如NScoreTata)可以帮助您克服对象相关建模(ORM)障碍不匹配。在这种情况下,使用数据库进行非常简单的数据存储可能很有意义。

还有许多开源数据持久层(Nhiberante,db4o等),可以帮助简化使用数据库作为持久存储...如果您可以使用它们,可以将方程移动以使用数据库来移动方程式。

当您需要支持查询或搜索功能时,数据库可以基本简化应用程序的开发。关系数据库支持查询语言(SQL),该数据库移动识别和检索数据库结果的工作更加容易。让数据库进行繁殖可以是一个重要的节省时间 - 因为数据库专门设计用于正确有效地执行查询操作。但是,这是以精心设计的关系数据结构为代价的,您必须创建。

一个重要的考虑因素是,用户是否会共享使用您的应用程序创建/消费的数据。如果您的应用程序更面向文档(想想Word,Excel,PowerPoint),则基于文件的序列化模型可能更合适。如果您的应用程序的数据将无法共享 - 那么数据库可能是有道理的。

另一个重要因素是您希望数据的开放程度如何。数据库将信息存储在定义明确的结构(表)中,这使您(和您的用户)更容易直接访问和检查数据。诸如XML之类的存储格式也允许这样做,但程度较小。

其他提示

对于单个用户而言,像MySQL或SQL Server这样的成熟客户端/服务器数据库可能会过大。但是您可能会从嵌入式/基于文件的引擎中获得一些用途 sqlite 或者 SQL Server CE, ,尤其是如果您想对数据做更多的事情,而不仅仅是通过ID查找单一记录。如果您自己进行数据存储,则必须编写大量代码才能获得符合某些条件的记录,而且我几乎保证您不会像为谋生的人那样做到这一点。

就我个人而言,它比使用应用程序的用户数量更多。

考虑一下您的数据,这是否复杂?如果您实际上创建一个数据库,就对象而不是行量,它将有多大...多少表等...

考虑未来,尽管它只有一个用户,但我认为数据仍会增加,每次都会节省多少数据?

毫无疑问,数据库方法将加快您的开发 - 与XML文件相比,您的数据将具有更好的完整性。我讨厌亲自使用文件...过去,我经历了文件中缺少数据等的经验。

请记住,如果您想保持资源有限,总是有SQL紧凑型版。

如果您在存储库中实现存储功能1)2),则可以从存储到文件开始,然后移至数据库存储,如果以后确定需要这样做

1) http://martinfowler.com/eaacatalog/repository.html
2) https://web.archive.org/web/20110503184234/http://blogs.hibernatingrhinos.com/nhibernate/archive/Archive/Archive/2008/10/10/08/the-repository-pository-pattern.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top