在进入SQLite之前的任何考虑因素?

时间:2010-02-18 19:06:07

标签: c# sqlite

我有一个WCF应用程序,目前正在使用基于XML的文件存储来存储用于生成报告的数据。除此之外,处理决策基于存储在这些XML文件中的信息。

我现在正在播放大约3万个文本文件。这令人难以置信的负担,并且应用程序有时会停止运转。

我一直想把XML DAL转向支持RDBMS,但项目经理根本不会允许它。但他们愿意看一下无服务器的解决方案,例如SQLLite。我真的很想直接进入并开始使用它作为替代DAL(数据访问层)。

在整个解决方案中我只需要不超过20个表,而且我预计每天不会超过20 000到10万个交易,但这是极端的,实际数量将小于此大多数情况下。

更新

我不期待大量的同时连接,当我说事务时,我实质上是指1或2个客户端按顺序进行调用并对数据库执行。有时外部客户端可能会快速调用数据库。但是大部分数据库连接将由我的WCF服务完成,这是一项后端计划任务,不能为整个组织的100名员工提供服务。

另一个好处是我只需要保留90天的数据,因此数据库不应该变得太大。

我主要担心的是:

SQLLite的可靠性如何?如果数据库文件被破坏怎么办,我将丢失所有处理数据。 DB备份有多容易?它会处理我的卷吗?最后,.net提供商的工作情况如何(位于此处http://sourceforge.net/projects/sqlite-dotnet2/)。

如果您有使用SQLLite的经验,请发布您的经验,以便我做出明智的决定是否切换。

提前致谢...

5 个答案:

答案 0 :(得分:5)

SQLite与您的操作系统和硬件一样可靠。

它的事务速率与SQL服务器类似,并且通常更快,因为它全部在进行中。

.NET ADO提供程序运行良好。

要备份数据库,请停止服务并复制文件。如果日志文件存在,也将其复制。

编辑:SQLite默认使用UTF-8,因此使用ADO-NET提供程序时,您应该能够避免丢失重音(只要您遵循字符串规则中的典型XML)。

答案 1 :(得分:3)

您可以考虑使用Microsoft的Sql Compact Edition 它就像sqlite,就单个文件嵌入式数据库而言,但与.net框架有更好的集成:) SQLite看起来很可靠,即使是微软的SQLite,也不希望在数据库损坏的情况下获得太多支持。

答案 2 :(得分:1)

考虑到你的事务量我会说数据库本身是一个单一的整体文件,只有文件系统锁定可能是个问题。

据我所知,没有基于行的锁定。

答案 3 :(得分:1)

我使用SQLite与.Net提供商在monouser环境中没有任何问题,除了一个问题:口音,没有显示正确。备份非常简单:SQLite数据库是纯文本文件。只需复制它。

答案 4 :(得分:1)

我使用Sqlite存储XML配置数据并且没有任何问题。我使用System.Data.Sqlite提供程序:http://sqlite.phxsoftware.com/。它很扎实,并有一个很好的支持论坛。它还包括一个LINQ提供程序。它还与VS 2008集成,因此您可以使用Server Explorer查询表。示例和文档还说明了如何使用参数化命令和事务来提高性能。

LinqPad的候选版本现在支持Sqlite:http://www.linqpad.net/Beta.aspx

Sqlite将所有内容存储在一个文件中,可以像任何其他二进制文件一样进行备份。

Sqlite只支持文件级锁定,但不应该出现性能问题,因为它听起来不像你会有大量的同步事务。

Unicode应该不是问题。论坛中的此链接指的是某人尝试使用不兼容的实用程序http://sqlite.phxsoftware.com/forums/t/954.aspx读取unicode字符的区域。

该网站显示了如何通过自定义整理器使用System.Data.Sqlite进行不区分大小写的UTF8比较,以俄语字符为例:http://www.codeproject.com/KB/database/SQLiteUTF8CIComparison.aspx