2010-06-28 79 views
5

我正在寻找一个通用数据访问框架,它将提供跨SimpleDB,Azure表,Cassandra,CouchDB,MongoDb等各种nosql数据库的可移植性。我正在构建一个应用程序,并希望我的客户能够使用哪个nosql商店他们想要的。是否有.NET的数据库不可知的nosql框架?

在更相关的情况下,我会使用Linq over nHibernate或Entity Framework,但是我还没有找到与nosql数据库等效的框架。我发现的所有数据库都是特定于API的,尽管似乎存在显着的共性。有一个存在吗?最好有一个LINQ。

回答

4

没有这些东西太不一样了,太具体的(至少现在)。如果你想要一些简单的,就像只能通过ID访问的对象的包装一样,那么你可能会有希望。事实上,如果你看看NoRM,有可能使它适应不同的提供商。

然而,除了一小部分核心功能之外,这些“NoSQL”数据库在许多方面都有很大不同。我的意思是,你如何无法实现各种map/reduce功能?当他们支持不同的原子操作时,你如何实现原子操作?无论哪种方式,在NoSQL生命周期中,我们都过早地拥有一个不可知论的框架。 Azure基本上放弃了他们的NoSQL产品,转而使用“托管SQL服务器”。 MongoDB可能20个月大,CouchDB仍然在0.11.x版本,SimpleDB不到24个月大,Cassandra版本是0.6.2,并且可能已经在几年内正常使用。

我们还没有到位。

+0

那么现在的核心共同特征是什么?它真的只是一个通过它的对象ID访问的对象吗? BTW。 Azure没有删除Tables,他们只提供了Relational和NoSQL。亚马逊与RDS一样。 – 2010-06-29 17:43:09

+1

在这一点上,我认为你会得到基本的CRUD操作。即使在Couch和Mongo之间,Map/Reduce也有很大不同(它们相对相似)。一些列出的产品支持版本控制,但Mongo不支持。 Couch具有“视图”的概念,这对于缩小地图非常重要,但Mongo只是将map-reduce输出转换为新的集合。所以有可能你可以“抽象出”这个,但是它有很多抽象,B/C他们做着不同的事情。 – 2010-06-30 01:18:48

1

有MongoDB的LINQ提供程序,但我不认为有一个通用的.net LINQ提供程序'all'nosql db。

有些人预期的约一个通用的NoSQL的查询语言:http://nosql.mypopescu.com/post/731261002/a-common-nosql-query-language

+1

因此,结构化的“无结构化查询语言”查询语言?嗯......有点错过了,不是吗? :-) – 2010-06-28 04:23:48

+0

@沃伦,这非常具有讽刺意味 – Mocky 2010-06-28 14:25:00

0

如果您只有基本的持久性持久性要求,我会为Memcached,Redis,InMemory和FileSystem缓存提供一个common caching API供应商。

它只支持Redis,但我有一个C# Redis Client,它有一个非常熟悉的C#API。它本地支持持久化的POCO类型,并将所有Redis的高级服务器端数据结构作为本机.NET IList,ICollection数据结构公开,以便它们可以轻松用于现有的C#API(如LINQ等)。

相关问题