磁盘数据库存储,最佳实践

时间:2010-07-31 08:26:30

标签: c# storage local disk

如果这个问题对你来说很常见,我很抱歉,我快速搜索了这个网站并进行了一些谷歌搜索,但找不到令人满意的答案。

我的问题是这个;

我现在只是一名软件开发人员已有3到4年了。这似乎是一个足够长的时间来自己回答这个问题但是在我所有的时间里,我从来没有开发过软件,其中数据存储的主体不需要在在线数据库中。但是,这次,我的最新开发只需要将其数据仅存储到磁盘上。

实际数据本身很轻。在代码中,主资产将是一个只有少数基于字符串的属性的类,必须持久化。我最初的想法是简单的序列化。在应用程序关闭时,新资产只是序列化并作为文件存储在磁盘上。我也可能出于备份目的(或者如果它对于序列化类来说是一个更好的选择),XML文件也是合适的。

我无法想到这两种方法中任何一种明显的缺点,正是这一事实让我公开提出这个问题。根据我的经验,很少有问题的解决方案没有它的缺点。

4 个答案:

答案 0 :(得分:3)

序列化(二进制或XML)适用于少量数据。这种方法的问题是当你获得大量数据时(你可能需要查询)。

如果您使用的是Windows平台并且需要适当的数据库,则可以使用Windows附带的嵌入式数据库引擎 - ESENT。它是Exchange的后备存储和RavenDB

Here是它的.NET包装器库。

  

ManagedEsent提供对ESENT的托管访问,ESENT是Windows原生的可嵌入数据库引擎。 ManagedEsent使用属于Microsoft Windows的esent.dll,因此没有额外的非托管二进制文件可供下载和安装。

答案 1 :(得分:1)

最轻量级的解决方案当然是使用XML和序列化。这样做的主要优点是它非常简单,只需要很少的代码,并且可以使用文本编辑器轻松编辑。另一个优点是能够拥有多个文件,并且它们很容易从PC传输到PC。

这是一个不错的tutorial on XML serialization

但是,如果您的应用程序将要读取,写入和更改数据,并且只有一个数据源,那么使用轻量级数据库会更好。许多人喜欢SQLite,而我个人更喜欢Firebird

请参阅此question for using SQLite with C#see here for information for using Firebird with .net

答案 2 :(得分:0)

另一个嵌入式数据库选项是Sql Server Compact Edition。这个is v4的最新版本似乎比以前的版本有了很大的改进。

它在功能上等同于使用XML文件,访问数据库,甚至是普通的旧文本文件,因为您不需要运行Sql Server服务,也不需要在应用程序运行的机器上安装任何特殊内容上。

答案 3 :(得分:0)

我一直在项目中使用Sqlite,它运行得很好而且也很容易使用,但是在使用Sqlite时要注意的一点是它设计用于单个用户环境,所以如果你使用它作为网站后端的数据库,例如你可能会发现它会在最轻微的负载下挣扎..

查看C#包装器的此链接: http://sqlite.phxsoftware.com/

我还使用NHibernate和NHibernate.Linq与数据交互,你可以在这里获得两者兼容的构建:http://www.dennisdoomen.net/2009/07/nhibernate-210-ga-with-linq-and-fluent.html

NHibernate.Linq允许您在Sqlite数据库上使用那些不错的Linq查询语法:

var onePiece =来自s中的session.Linq()其中s.Name ==“One Piece”选择s;