c# - query - ¿Qué soluciones NoSQL existen para.NET?
mongodb c# (14)
Amazon proporciona un .NET SDK para interactuar con su SimpleDB (así como con el resto de la familia de servicios de AWS ).
http://aws.amazon.com/simpledb/
http://aws.amazon.com/sdkfornet/
La mejor parte: un nivel gratuito en la nube (a partir de ahora: "Los clientes nuevos y existentes reciben 25 horas de máquina SimpleDB y 1 GB de almacenamiento gratis cada mes").
¿Qué soluciones NoSQL existen para .NET?
Ayende solo está escribiendo una en .net, se llama RavenDB .
Mira su repositorio de Git:
http://github.com/ravendb/ravendb
... y sus entradas de blog al respecto:
http://ayende.com/blog/tags/raven
EDITAR:
Ahora está terminado. Puede verificarlo en http://ravendb.net/ .
Eche un vistazo a db4o . Es basado en objetos, fácil, autónomo (como sqlite3) funciona con LINQ y es de código abierto.
El proyecto Lucene.net se ajustaría a sus requisitos generales. Proporciona una API para almacenar e indexar documentos, almacenando la base de datos en un sistema de archivos.
El proyecto es principalmente una biblioteca de búsqueda de texto completo, originalmente escrita en Java y luego transferida a .NET. Por lo tanto, no tiene soporte de Linq, pero está muy bien establecido y es un proyecto bastante maduro.
Una desventaja podría ser la complejidad del proyecto, parece que está buscando una solución plug and play, sin embargo, el proyecto Lucene requiere que dedique un poco de tiempo a comprender los detalles de la indexación y búsqueda de texto completo.
Sin embargo, una ventaja importante es que el rendimiento de la biblioteca Lucene es increíblemente rápido, especialmente para la búsqueda simultánea de grandes conjuntos de datos, por lo que es una gran solución para ejecutar un sitio web independiente sin la necesidad de ejecutar un servidor de base de datos.
He estado usando BrightstarDB para el último proyecto en el que he estado trabajando. Es .NET NoSQL nativo con Entity Framework completo (lo que hizo cuestión de minutos para poner en marcha una aplicación desde la primera descarga).
http://ravendb.net/ probé con http://ravendb.net/ , pero aunque fue bastante fácil de instalar, toda la configuración de MapReduce e indexación me tomó demasiado tiempo para entenderlo y era lenta y torpe cada vez que quería navegar por las relaciones entre "cosas" en ambas direcciones.
BrightstarDB ha sido brillante de desarrollar con, y es muy similar al primer Entity Framework de código, pero sin el dolor de una base de datos configurada, y puedo hacer muchos cambios en mi modelo de datos sin el dolor que tuve que pasar con SQL.
¡Definitivamente vale la pena echarle un vistazo!
Microsoft lanzará soon (final del trimestre 2011) una solución "NoSQL" en SQL Azure.
Se basa en la nueva función Federaciones y utiliza XML para el almacenamiento semiestructurado .
[Editar] ¡Antes de votar a la baja, lea los artículos que explican cómo utilizar las características "NoSQL" en SQL Azure, que obviamente tiene una integración perfecta con .NET / C # / LINQ!
No indica cuáles son sus requisitos (es decir, tiene que ejecutarse en Windows), por lo que descartaré los 2 que he utilizado con éxito.
MongoDB es una base de datos de documentos que tiene binarios precompilados para Windows de 32 bits y 64 bits. Eso siempre es bueno de ver.
El acceso del cliente se puede hacer con este controlador . No es un cliente oficial del equipo de MongoDB en sí, pero lo he usado. Y en mi uso, ha soportado lo que necesito. Hay algunas cosas LINQ en el repositorio , pero no lo he intentado.
// from the wiki
using MongoDB.Driver;
Mongo db = new Mongo();
db.Connect(); //Connect to localhost on the default port.
Document query = new Document();
query["field1"] = 10;
Document result = db["tests"]["reads"].FindOne(query);
db.Disconnect();
Pude ejecutar tanto el cliente como el servidor en Windows sin problemas.
CouchDB es una opción también. Hay algunos clientes .NET nativos, pero todo CouchDB está hecho con REST. Entonces HttpWebRequest / Response te servirá bien aquí. Una publicación de blog de Rinat Abdullin muestra cómo encajan algunas de las piezas. También hay CouchBrowse . Nunca he usado un cliente nativo. GET / PUT / POST me han funcionado muy bien.
Conseguí que CouchDB funcionara en Windows (está escrito en Erlang), pero mis pruebas de rendimiento mostraron que Linux era más rápido. ¿Supongo que tal vez sea la forma en que se implementa Erlang? No se. Pero funciona tanto en Windows como en Linux. Y pude llamar la instancia de Linux desde Windows fácilmente (es solo REST).
El siguiente que nunca he intentado, pero tengo un amigo que se compromete con el proyecto HBase . Y piensa que la interfaz de Thrift para HBase debería poder usarse desde .NET (ya que Thrift generará C #). Lo más importante aquí es el hecho de que Hadoop / HBase se enfoca más en los entornos * nix. Pero no hay ninguna razón por la que no pueda ejecutar HBase en un clúster de Linux y conectarse desde .NET en Windows para la producción. Para el desarrollo, puede ejecutar HBase en Windows usando Cygwin. Un buen conjunto de instrucciones sobre cómo hacer esto está here .
Hay otros (Valdemort, Cassandra, etc.) pero no tengo ninguna experiencia real con ellos, así que no voy a pretender decir cómo se integran con C # /. NET. Lo más importante a mirar es cómo se ve su API: si tiene una interfaz Thrift, REST, etc., debería poder conectarse sin problemas. Es posible que no pueda ejecutar el servicio NoSQL en el sistema operativo Windows de manera tan eficiente como Linux, pero tal vez eso no sea un gran problema.
EDIT cambió el hecho de que hay algunos clientes nativos de CouchDB. No estoy familiarizado con ellos ya que siempre uso HTTP sin formato y mis propias clases de contenedor.
Otra opción es MemcacheDB .
Se basa en Memcache, pero agrega almacenamiento persistente. Aquí está su propaganda:
MemcacheDB es un sistema de almacenamiento de clave-valor distribuido diseñado para persistente. NO es una solución de caché, sino un motor de almacenamiento persistente para el almacenamiento y recuperación de objetos basados en valores-clave de forma rápida y confiable. Se ajusta al protocolo de Memcache (no completado, ver más abajo), por lo que cualquier cliente con memoria de memética puede tener conectividad con él. MemcacheDB utiliza Berkeley DB como un back-end de almacenamiento, por lo que se admiten muchas características, incluidas la transacción y la replicación.
Puedes usar la famosa base de datos de Cassandra . También usa la interfaz de ahorro.
Si quieres motores de bases de datos ligeras que funcionen bien con .NET y con soporte LINQ, puedes probar Eloquera, STSdb y Siaqodb.
Vea esta publicación en mi blog para tener una idea de lo que ofrecen.
También debes considerar usar Redis . Es una base de datos NoSQL avanzada con soporte para estructuras de datos ricas del lado del servidor, como listas, conjuntos, conjuntos ordenados y hashes. Se ejecuta en memoria, pero admite tanto un modo de persistencia de "instantánea" como un diario de archivo "Anexar" para la integridad de las instantáneas intermedias.
Redis es muy rápido
También es una de las bases de datos NoSQL más rápidas que existen: 110000 SETs / second, 81000 GETs / second en un cuadro Linux de nivel de entrada. Verifica los puntos de referencia .
Al querer ser fiel a Redis, he desarrollado un C # Redis Client muy rápido con un fuerte enfoque en el rendimiento. Al ejecutar los puntos de referencia propios de Raven DB, la configuración predeterminada del servidor redis es 16.9 veces más rápida que Raven DB. Cuando se ajusta para usar la opción appendfsync always
(aunque no se recomienda), sigue siendo 11.75x más rápido .
@marcgravell ha desarrollado un asincrónico C # Redis Client muy rápido utilizado para manejar s y otros sitios de intercambio de Stack distribuidos en caché.
Simple y Elegante
Al igual que la mayoría de los almacenes de datos NoSQL, Redis no tiene esquemas, lo que le permite usarlo de inmediato sin tener que definir ningún esquema por adelantado, lo que proporciona un gran impulso a la productividad. La belleza de Redis es que es como acceder a las clases de colección genérica de .NET a las que está acostumbrado en C #, por lo que hay muy poca proyección que deba hacerse ya que su API ya es una coincidencia cercana con las listas y estructuras de datos en memoria. programa que ya usa.
Es esta elegancia de ofrecer estructuras de datos comp-sci fundamentales que diferencia a Redis, le permite ser extremadamente versátil y solo admite un conjunto de operaciones limitado. es decir, Redis se ha visto comúnmente como un caché distribuido, una cola de mensajes, un intermediario IPC entre idiomas / procesos, Pub / Sub, comunicaciones basadas en push / evento, bloqueo distribuido, origen de eventos CQRS, generador de ID único, etc. Incluso si usted '' No lo utilizo como su almacén de datos principal, su velocidad y simplicidad le da acceso a una versátil caja de herramientas suizo-ejército que puede llenar una gran cantidad de casos de uso.
Completo con Redis Client
Hay una cantidad de clientes Redis de C # / .NET disponibles, y en NuGet . El siguiente ejemplo utiliza el cliente de código abierto C # de mi ServiceStack .
Toda la documentación y tutoriales para C # Redis Client de ServiceStack está disponible en: http://www.servicestack.net/docs/redis-client/redis-client
El cliente proporciona una interfaz completa que proporciona envoltorios para la asignación genérica de IList, IDictionary e ICollection de .NET a las estructuras de datos del lado del servidor enriquecido de Redis. Para obtener una descripción general rápida de sus características, consulte el mapa de imágenes de la API .
Un buen tutorial que muestra cómo desarrollar aplicaciones en el mundo real está en: http://www.servicestack.net/docs/redis-client/designing-nosql-database
Vea el código fuente de Redis para otro ejemplo de una aplicación del mundo real construida completamente con Redis.
Código de muestra que muestra una aplicación CRUD completa:
public class Todo
{
public long Id { get; set; }
public string Content { get; set; }
public int Order { get; set; }
public bool Done { get; set; }
}
//Thread-safe client factory
var redisManager = new PooledRedisClientManager("localhost:6379");
redisManager.ExecAs<Todo>(redisTodos => {
var todo = new Todo {
Id = redisTodos.GetNextSequence(),
Content = "Learn Redis",
Order = 1,
};
redisTodos.Store(todo);
Todo savedTodo = redisTodos.GetById(todo.Id);
savedTodo.Done = true;
redisTodos.Store(savedTodo);
redisTodos.DeleteById(savedTodo.Id);
var allTodos = redisTodos.GetAll();
Assert.That(allTodos.Count, Is.EqualTo(0));
});
Para jugar con este ejemplo en vivo, vea la aplicación TODO de Backbone de ServiceStack retroadaptada con un backend de C # Redis .
Se ejecuta en todos los idiomas y plataformas
Como resultado de su simplicidad, tiene enlaces de lenguaje para casi todos los idiomas en uso en la actualidad: http://redis.io/clients
Es aún más escueto en los lenguajes dinámicos, así de fácil es crear un servidor web no bloqueante que aloje contadores con nombre en node.js / CoffeeScript:
app.get ''/counters/:id'', (request, response) ->
id = request.params.id
redis.incr id, (err, val) ->
response.send "#{id}: #{val}", ''Content-Type'': ''text/plain'', 201
Uno de los beneficios de NoSQL es que se puede mezclar con desarrolladores de diferentes entornos lingüísticos que se unen para descubrir la mejor forma de aprovechar el redis para satisfacer nuestras necesidades más exigentes.
Ampliamente utilizado por las compañías más grandes
Debido a su simplicidad, estabilidad y velocidad, es utilizado por muchas grandes compañías, que incluyen:
- Desbordamiento de pila
- GitHub
- Gorjeo
- Tormenta de nieve
- Flickr
- Digg
Descargando Redis para Windows
He proporcionado instrucciones de instalación y descargas para las 2 formas más populares de ejecutar Redis en Windows: https://github.com/mythz/redis-windows que muestra cómo:
- Utilice Vagrant para ejecutar la última versión estable de Redis dentro de una VM de VirtualBox .
- Descargue y ejecute el puerto nativo de Microsoft de Redis
db4o es genial, pero tenga en cuenta que tiene una versión de código abierto, pero no es gratuito para uso comercial.
http://ravendb.net/ tiene la mejor http://ravendb.net/ con .NET / LINQ . Es muy fácil obtener el cliente .NET usando NuGet ; un administrador de extensiones en línea de Visual Studio (similar a la App Store de Apple).
Si las herramientas de desarrollo son más importantes para usted que el rendimiento extremo, debería considerar RavenDB.
http://ravendb.net/ de Ayende es un backend basado en .NET y un cliente NoSQL (específicamente base de datos de documentos). La fuente está disponible gratuitamente. El rendimiento está a la par con MongoDB (las últimas pruebas fueron alrededor de las 6000 inserciones por segundo). La indexación se hace de una manera muy inteligente utilizando LINQ . Interfaz REST , interfaz de usuario web. Muy, muy inteligente, de hecho.
RavenDB puede ejecutarse como un servicio, en IIS o mediante una consola (exe). Requiere .NET 4 para el lado del servidor.
El cliente puede ser .NET 3.5. De hecho, el cliente correrá en Mono , creo.
http://groups.google.com/group/ravendb/web : toda la documentación que hay
Fui al evento de lanzamiento, añadí características increíbles y mucho más por venir. Todos quedaron impresionados por Raven, así que definitivamente es uno de los que echa un vistazo.