2010-06-28 10 views
5

Estoy buscando un marco común de acceso a datos que brinde portabilidad en varias bases de datos nosql como SimpleDB, Azure Tables, Cassandra, CouchDB, MongoDb, etc. Estoy construyendo una aplicación y me gustaría que mis clientes puedan usarla que cada tienda nosql quieren.¿Existe un marco nosql independiente de la base de datos para .NET?

En un escenario más relacional, utilizaría Linq sobre nHibernate o Entity Framework, pero no he encontrado un marco equivalente para las bases de datos nosql. Todo lo que he encontrado es una API específica de la base de datos, aunque parece haber una gran similitud. ¿Existe uno? Preferiblemente uno con LINQ.

Respuesta

4

Sin estas cosas son demasiado diferentes y demasiado específico (al menos por ahora). Si quisiera algo realmente simple, como un envoltorio para un objeto al que solo se accede por ID, entonces puede tener una esperanza. De hecho, si observa NoRM, es posible adaptarlo a varios proveedores.

Sin embargo, aparte de un pequeño conjunto de características básicas, estas bases de datos "NoSQL" son bastante diferentes en muchos aspectos. Quiero decir, ¿cómo se implementan las diversas funciones de mapa/reducir de forma agnóstica? ¿Cómo se implementan las operaciones atómicas cuando admiten diferentes operaciones atómicas?

De cualquier manera, estamos demasiado adelantados en el ciclo de vida NoSQL para tener un marco de trabajo independiente para todo esto. Azure básicamente dejó caer su oferta NoSQL a favor del "servidor SQL alojado". MongoDB tiene quizás 20 meses, CouchDB todavía está en la versión 0.11.x, SimpleDB tiene menos de 24 meses, Cassandra está en la versión 0.6.2 y ha estado en uso regular durante un par de años.

No hemos llegado todavía.

+0

¿Cuál es el conjunto básico de características comunes en este momento? ¿Es realmente solo un objeto al que se accede a través de su id de objeto? BTW. Azure no soltó Tablas, solo ofrecieron Relacional y NoSQL. Lo mismo que Amazon hizo con RDS. –

+1

En este punto, creo que obtiene operaciones CRUD básicas. Map/Reduce es significativamente diferente incluso entre Couch y Mongo (que son relativamente similares). Algunas de las ofertas enumeradas son compatibles con el control de versiones, pero Mongo no. Couch tiene el concepto de "vistas", que es fundamental para la reducción de mapas, pero Mongo simplemente arroja resultados de reducción de mapas en una nueva colección. Entonces, es posible que puedas "abstraer" esto, pero es una gran cantidad de abstracción, porque están haciendo cosas diferentes. –

1

Existen proveedores de LINQ para MongoDB, pero no creo que exista un proveedor genérico de .NET linq para 'todos' los db's de nosql.

Algunas personas han contemplado sobre un lenguaje de consulta nosql genérica: http://nosql.mypopescu.com/post/731261002/a-common-nosql-query-language

+1

Entonces, ¿un lenguaje de consulta estructurado de "lenguaje de consulta no estructurado"? Hmmmm .... tipo de pierde el punto, ¿no? :-) –

+0

@ Warren que es bastante irónico – Mocky

0

Si solo tiene requisitos de persistencia básica, mantengo un common caching API con proveedores para el almacenamiento en caché de Memcached, Redis, InMemory y FileSystem.

Solo es compatible con Redis, pero tengo un C# Redis Client que tiene una API de C# muy conocida. Admite de forma nativa los tipos persistentes de POCO y expone todas las estructuras de datos avanzadas del lado del servidor de Redis como .NET IList, ICollection estructuras de datos para que puedan usarse fácilmente en API C# existentes como LINQ, etc.

Cuestiones relacionadas