Is there a database agnostic nosql framework for .NET?
Asked Answered
M

4

6

I'm looking for a common data access framework that will provide portability across various nosql databases like SimpleDB, Azure Tables, Cassandra, CouchDB, MongoDb, etc. I'm building an app and would like my customers to be able to use which ever nosql store they want.

In a more relational scenario, I'd use Linq over nHibernate or Entity Framework, but I haven't found an equivalent framework for nosql databases. All I've found is database specific API's even though there seem to be significant commonality. Does one exist? Preferably one with LINQ.

Makeyevka answered 28/6, 2010 at 0:0 Comment(0)
O
4

No these things are too different and too specific (at least right now). If you wanted something really simple, like just a wrapper on an object that is only accessed by ID, then you may have a hope. In fact, if you look at NoRM, it may be possible to adapt that to various providers.

However, outside of a small core set of features, these "NoSQL" databases are quite different in many regards. I mean, how do you implement the various map/reduce functions agnostically? How do you implement atomic operations when they support different atomic operations?

Either way, we're way too early in the NoSQL life-cycle to have an agnostic framework for all of this. Azure basically dropped their NoSQL offering in favor of "hosted SQL server". MongoDB is maybe 20 months old, CouchDB is still on version 0.11.x, SimpleDB is less than 24 months old, Cassandra is on version 0.6.2 and has maybe been in regular use for a couple of years.

We're just not there yet.

Oligopsony answered 28/6, 2010 at 4:22 Comment(2)
So what is the core set of common features right now? Is it really just an object that is accessed via it's object id? BTW. Azure didn't drop Tables, they just offered both Relational and NoSQL. Same thing that Amazon did with RDS.Makeyevka
At this point, I think that you get basic CRUD operations. Map / Reduce is significantly different even just between Couch and Mongo (which are relatively similar). Some of the listed offerings support versioning, but Mongo does not. Couch has the concept of "views" which is central to map-reducing, but Mongo just throws map-reduce outputs into a new collection. So it's possible that you could "abstract" this away, but it's a lot of abstracting, b/c they're doing different things.Oligopsony
J
2

A common query language (called UnQL) is being developed: http://www.unqlspec.org/display/UnQL/Home

Johnjohna answered 11/8, 2011 at 11:29 Comment(0)
J
1

There are LINQ providers for MongoDB but I don't think that there is a generic .net linq provider to 'all' nosql db's .

Some people have contemplated about a generic nosql query language: http://nosql.mypopescu.com/post/731261002/a-common-nosql-query-language

Johnjohna answered 28/6, 2010 at 3:47 Comment(2)
So, a structured "no structured query language" query language? Hmmmm.... kind of misses the point, doesn't it? :-)Gurango
@Warren that is pretty ironicMonreal
R
0

If you only have basic persistence persistence requirements, I maintain a common caching API with providers for Memcached, Redis, InMemory and FileSystem caching.

It only supports Redis, but I have a C# Redis Client that has a very familiar C# API. It natively supports persisting POCO types and exposes all of Redis's advanced server-side data-structures as native .NET IList, ICollection data structures so they can easily be used in existing C# APIs like LINQ, etc.

Retiary answered 11/9, 2010 at 15:26 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.