2010-06-28 10 views
5

Sto cercando un framework di accesso ai dati comune che fornisca la portabilità tra vari database nosql come SimpleDB, Azure Tables, Cassandra, CouchDB, MongoDb, ecc. Sto costruendo un'app e vorrei che i miei clienti potessero essere in grado di utilizzare quale negozio nosql mai vogliono.Esiste un framework nosql agnostico per database per .NET?

In uno scenario più relazionale, utilizzerei Linq su nHibernate o Entity Framework, ma non ho trovato un framework equivalente per i database nosql. Tutto quello che ho trovato sono API specifiche per database anche se sembra esserci una comunanza significativa. Esiste? Preferibilmente uno con LINQ.

risposta

4

Nessun queste cose sono troppo diversi e troppo specifica (almeno in questo momento). Se volessi qualcosa di davvero semplice, come un semplice wrapper su un oggetto a cui si accede solo tramite ID, allora potresti avere una speranza. Infatti, se si guarda a NoRM, potrebbe essere possibile adattarlo a vari provider.

Tuttavia, al di fuori di un piccolo nucleo di funzionalità, questi database "NoSQL" sono molto diversi per molti aspetti. Voglio dire, come implementa le varie mappe/riduci le funzioni in modo agnostico? Come implementate le operazioni atomiche quando supportano diverse operazioni atomiche?

In entrambi i casi, siamo troppo presto nel ciclo di vita NoSQL per avere un quadro agnostico per tutto questo. In sostanza, Azure ha abbandonato la propria offerta NoSQL a favore di "server SQL ospitato". MongoDB ha forse 20 mesi, CouchDB è ancora sulla versione 0.11.x, SimpleDB ha meno di 24 mesi, Cassandra è in versione 0.6.2 e forse è stato usato regolarmente per un paio d'anni.

Non siamo ancora arrivati.

+0

Allora, qual è l'insieme principale di funzionalità comuni in questo momento? È davvero solo un oggetto a cui si accede tramite il suo ID oggetto? BTW. Azure non ha rilasciato Tables, ma ha offerto sia Relational che NoSQL. La stessa cosa che Amazon ha fatto con RDS. –

+1

A questo punto, penso che si ottengano le operazioni CRUD di base. Map/Reduce è significativamente diverso anche tra Couch e Mongo (che sono relativamente simili). Alcune delle offerte elencate supportano il controllo delle versioni, ma Mongo no. Couch ha il concetto di "punti di vista" che è fondamentale per la riduzione delle mappe, ma Mongo semplicemente lancia gli output di riduzione delle mappe in una nuova raccolta. Quindi è possibile che tu possa "astrarre" questo, ma è un sacco di astrazione, b/c stanno facendo cose diverse. –

1

Esistono provider LINQ per MongoDB, ma non credo che esista un provider .net linq generico per "tutti" nosql db.

Alcune persone hanno contemplato su un linguaggio di query NoSQL generico: http://nosql.mypopescu.com/post/731261002/a-common-nosql-query-language

+1

Quindi, un linguaggio di query strutturato "linguaggio di query non strutturato"? Hmmmm .... tipo manca il punto, vero? :-) –

+0

@Warren che è abbastanza ironico – Mocky

0

Se si dispone solo di requisiti di persistenza di persistenza di base, mantengo un common caching API con i provider per la memorizzazione nella cache Memcached, Redis, InMemory e FileSystem.

Supporta solo Redis, ma ho uno C# Redis Client con un'API C# molto familiare. Supporta nativamente i tipi POCO persistenti ed espone tutte le strutture dati avanzate lato server di Redis come strutture native .NET IList, ICollection in modo che possano essere facilmente utilizzate in API C# esistenti come LINQ, ecc.