我正在考虑为我的Windows桌面应用程序使用/实现某种嵌入式键值(或文档)存储.我希望能够存储各种类型的数据(GPS轨道就是一个例子),当然也能够查询这些数据.数据量将无法同时加载到内存中.
我正在考虑使用sqlite作为键值存储的存储引擎,类似于y-serial,但是用.NET编写.我还读到了FriendFeed使用MySQL来存储无模式数据,这是如何将RDBMS用于非关系数据的一个很好的指针.sqlite似乎是一个很好的选择,因为它的简单性,可移植性和库大小.
我的问题是嵌入式非关系型商店是否还有其他选择?它不需要是可分发的,也不必支持事务,但它必须可以从.NET访问,并且应该具有较小的下载大小.
更新:我发现了一篇名为SQLite作为键值数据库的文章,它将sqlite与Berkeley DB进行了比较,Berkeley DB是一个嵌入式键值存储库.
Windows有一个内置的嵌入式非关系存储.它被称为ESENT,由多个Windows应用程序使用,包括Active Directory和Windows桌面搜索.
http://blogs.msdn.com/windowssdk/archive/2008/10/23/esent-extensible-storage-engine-api-in-the-windows-sdk.aspx
如果您想要.NET访问,可以使用CodePlex上的ManagedEsent层.
http://managedesent.codeplex.com/
该项目有一个PersistentDictionary类,它实现了一个实现IDictionary接口的键值存储,但是由数据库支持.
看看RavenDB.看起来它可以嵌入并且是无模式的并且可以与.NET一起使用
来自网站:
可扩展的基础架构:Raven构建于现有的,经过验证的可扩展基础架构之上
简单的Windows配置:Raven很容易在Windows上作为服务或IIS7网站进行设置和运行
Transactional:Raven支持System.Transaction与ACID事务.如果您将数据放入其中,那么该数据将保留在那里
Map/Reduce:使用Linq查询轻松定义map/reduce索引
.NET客户端API:Raven附带了一个功能齐全的.NET客户端API,可以实现工作单元等等
RESTful:Raven是围绕RESTful API构建的
我个人会选择使用NHibernate(和Fluent NHibernate)的SQLite.NHibernate可以为您的类自动生成数据库模式,因此您只需要指定要保留的类,并且使用Fluent NHibernate非常容易.此外,您可以搜索特定对象,而无需将所有数据加载到内存中.