.NET数据存储 - 数据库与单个文件

时间:2010-08-18 17:12:18

标签: c# .net database data-storage

我有一个C#应用程序,允许一个用户输入有关客户和工作站点的信息。这些信息非常基础。

  • 客户:姓名,号码,地址,电子邮件,相关的工作网站。
  • 工作地点:姓名,地点。

以下是我对此计划所需的规范。

  • 对输入的数据量没有限制。
  • 每个应用程序的单个用户。没有并发活动或多个用户。
  • 允许将用户条目/数据导出到可在应用程序/用户之间轻松共享的外部文件。
  • 允许用户查询根据客户信息/工作现场信息的不同组合显示客户。
  • 永远不会在应用程序之外查看或操作数据。
  • 程序几乎总是在运行,最小化到任务栏。
  • 启动时间不是很重要,但我希望查询速度相当快。

这似乎都指向了一个数据库,但是一个非常轻量级的数据库。但是,我还要求它对数据存储没有任何限制。如果您同意我应该使用数据库,请告诉我哪些最适合我的需求。如果您认为我不应该使用数据库,请就您认为最好的方式提出一些其他建议。

6 个答案:

答案 0 :(得分:4)

我的建议是使用SQLite。你可以在这里找到它:http://sqlite.org/。你可以在这里找到C#包装器版本:http://sqlite.phxsoftware.com/

SQLite非常轻量级,并且对于这样的轻量级引擎有一些非常强大的功能。您可以查看的另一个选项是Microsoft Access。

答案 1 :(得分:4)

你再次提出错误的问题:)

更好的问题是“我如何构建一个允许我更改数据存储实现的应用程序?”

如果应用存储库模式并正确连接它,则可以构建可互换的持久层。因此,您可以从一个实现开始,并根据需要进行更改,而无需重新设计业务或应用程序层。


一旦你有了一个存储库接口,你就可以尝试很多不同的方法:

平面文件 - 您可以将数据保存为XML,并且只要不是很多数据就可以将全部内容存储在内存中(只需在启动时读取文件,写入文件)在关机时)。使用内存中的XML,您可以获得非常高的吞吐量,而无需考虑数据库索引等。

可分发的数据库 - SQLite或SQL Compact工作得很好;它们提供了许多数据库优势,无需安装

本地数据库 - SQL Express是轻量级和全功能数据库之间的良好中间地带。如果仔细使用,访问就足够了。主要的好处是它包含在MS Office中(虽然默认情况下没有安装),并且一些IT团队比在SQL Express上安装Access更方便。

完整数据库 - MySql,SQL Server,PostGreSQL等。


鉴于您的具体要求,我建议您使用基于XML的平面文件 - 唯一的条件是您可以直接关联文件大小的应用程序的内存使用情况(因为您的数据是文本,即使XML的权重,这将使很多的条目变得非常大。)

以下是根据您的要求列出的优缺点:

<强>缺点

  • 输入的数据量没有限制。
    • 使用内存中的XML意味着您的应用程序无法扩展。它可以轻松处理10MB的数据文件,100MB应该不是问题(除非你的系统内存不足),高于你必须认真质疑“我能负担得起这么多内存吗?”。

<强>赞成

  • 每个应用程序的单个用户。没有并发活动或多个用户。
    • XML可以读入内存并由进程保存(真的是AppDomain)。它非常适用于并发性非常狭窄的单用户场景。
  • 允许将用户条目/数据导出到可在应用程序/用户之间轻松共享的外部文件。
    • XML非常适合导出,也易于导入Excel,数据库等......
  • 允许用户查询根据客户信息/工作现场信息的不同组合显示客户。
    • Linq-to-XML是你的朋友:D
  • 永远不会在应用程序之外查看或操作数据。
    • ....然后将其完全保留在内存中不会导致任何问题
  • 程序将几乎始终运行,最小化到任务栏。
    • 所以在启动时加载XML,并在关机时写入将是可以接受的(如果文件非常大,可能需要一段时间)
  • 启动时间不是很重要,但我希望查询速度相当快
    • 在启动时读取XML会相对较慢;但是当它被加载到内存中时,它将很难被击败。任何给定的DB都需要启动数据库引擎,进行互操作/跨进程/跨网络调用,从磁盘加载结果(如果没有被引擎缓存)等等......

答案 2 :(得分:3)

SQLite?怎么样?听起来它非常适合您的应用。

您可以使用System.Data.SQLite作为.NET包装器。

答案 3 :(得分:3)

听起来像数据库是100%你需要的。它提供数据存储,数据检索(包括查询)以及将数据导出为标准格式(直接从数据库或通过应用程序)的功能。

对于轻型数据库,我建议SQLite(发音为'SQL Lite';))。您可以谷歌获取有关如何设置它的教程,以及如何通过C#代码与它进行交互。我还找到了对SQLite的this C#包装器的引用,它可以为您完成大部分工作!

答案 4 :(得分:0)

您可以免费获得SQL Server Express。我会说问题不是为什么你要使用数据库,为什么不应该为什么?这类问题正是数据库所针对的问题,而SQL Server是一个功能非常强大且使用广泛的数据库,所以如果您打算使用其他解决方案需要为您提供一个很好的理由。不会使用数据库。

答案 5 :(得分:0)

数据库非常合适。 SQLite和其他人提到的一样好。

您还可以使用SQL Server Express的本地实例来利用与Microsoft开发堆栈的其他部分的改进集成(因为您提到了C#)。

第三个选项是文档数据库,如Raven,可能适合您的数据声音。

修改
第四个选项是在测试版发布几天后尝试Lightswitch。 (2010年8月23日)
/修改

数据存储(硬盘的空白区域)总是存在限制。根据维基百科,SQL Express仅限于10 GB for SQL Server Express 2008 R2