2010-05-01 42 views
112

Estoy buscando una base de datos para vincular con una aplicación node.js. Asumo que un json/nosql db sería preferible a un DB relacional [puedo hacerlo sin cualquier incompatibilidad de impedancia json/sql]. Estoy considerando:base de datos node.js

  • couchdb
  • mongodb
  • Redis

Cualquier persona tiene vistas/historias de guerra re compatiability/capacidad de despliegue de los anteriores, con Node.js? Cualquier favorito claro?

+2

Creo que sería útil responder a la pregunta si se mencionan requisitos aún más amplios. Cada DB tiene sus propios pros, contras y especialidades. Háganos saber las especificaciones! –

Respuesta

18

Redis es una opción popular. Lo que busca es un controlador de base de datos que no bloquee.

Las bases de datos que ha enumerado son todas muy diferentes. Redis toma la idea de los almacenamientos de valores clave y se ejecuta con ellos, agregando una variedad de tipos de datos y formas de consultar datos. La gente a menudo nota que Redis escala muy bien también; lo que significa que tiene una sobrecarga muy baja a pesar de tener la capacidad de funcionar.

Aquí está una lista de los módulos de bases de datos disponibles: http://wiki.github.com/ry/node/modules#database

+0

Sí Redis es genial, pero parece que podemos almacenar datos binarios pero no podemos recuperar eso. Al menos no pude encontrar ningún comando Redis para datos binarios. – AppleGrew

+0

¿De verdad? Solía ​​almacenar datos binarios (usando la clase Buffer de Node) y funcionó bien. ¿Qué versión de Redis/Node? – DanielS

+12

De forma predeterminada, node_redis devolverá cadenas de JavaScript para todos los comandos. Para obtener búferes, cree un cliente con createClient (puerto, host, {return_buffers: true}); –

25

pesar de que su elección depende en gran medida de las características que se van para, realmente aprecio CouchDB por su ambiente nativo JavaScript. Tanto los datos como las vistas están escritos en JavaScript, por lo que encaja muy bien con node.js en mi opinión.

También hay diferentes client libraries disponibles, algunos son bastante bajo nivel, otros muy, muy abstraído.

Pero como ya he dicho, también debería pensar en las características que necesita para su base de datos.

79

Soy el desarrollador del controlador de mongodb para node.js. Estoy usando mongodb para mis propios proyectos y he estado muy contento con el rendimiento de mongodb.

Mongodb driver for node.js

(Enchufe desvergonzado) No dude en hacer cualquier pregunta sobre el conductor en

Google group for the mongodb driver

o aquí en Stackoverflow

Diviértete con node.js. Me encanta la plataforma: D

+1

también miro a mongoose, que es un ORM bastante bueno que se construye sobre/usa el controlador mongodb para node.js – taxilian

+2

Estamos usando Node.js + MongoDB por bastante tiempo y va genial Y felicitaciones por @christkv, el controlador es sólido como una roca y no te fallará.Hemos implementado node.js/express.js + mongodb en EC2 con facilidad. Además, tenga en cuenta que no estamos usando Mangosta. Hablando de los desafíos (asumiendo que ya eres bueno en Node), necesitas ser bueno en la forma de Mongo de hacer las cosas (consultas y agregación) para cualquier aplicación seria o desarrollo de servicio. Aprender cómo Mongo es diferente de otras DB sería realmente lo que debes hacer primero si todavía estás en etapas de evaluación. –

+0

por lo que entiendo, algunas características realmente interesantes están llegando a la línea para acelerar la agregación en mongodb. Uno de ellos es funciones de agregación nativas. http://www.slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011 y también un posible cambio a v8 en lugar de spidermonkey para el motor de JavaScript que permitirá que cada comando map-reduce se ejecute en su propio hilo (bye bye singlethreaded map-reduce) – christkv

8

Puede que desee comprobar Persistence, persistencia de alto nivel/sistema de base de datos para node.js.

de thechangelog.com:

La persistencia es un proyecto para permitir una API de alto nivel por persistir datos entre el proceso se ejecuta. El objetivo es backends de soporte que son fáciles de usar, potente, flexible, o todos los arriba si es posible.

bases de datos soportadas incluyen:

  • PostgreSQL - Un nivel empresarial base de datos relacional. El controlador es implementado en JavaScript puro y se comunica a través de TCP utilizando el protocolo de conexión PostgreSQL .
  • Sqlite3 - Una base de datos relacional simple, rápida y sin servidor. Este controlador es un contenedor alrededor del programa de línea de comandos sqlite3 . Requiere sqlite3 estar en la ruta. La comunicación es extremadamente rápida, pero los tipos no son muy precisos . Solo hay cadenas y devueltos nulos.
  • MongoDB - A escalable, de alto rendimiento, abierto fuente, sin esquema, orientado a documentos base de datos. Este controlador también implementa el protocolo de cable en JavaScript y comunicado con el servidor a través de TCP.
  • JSON-DB: un sistema de fabricación casera, libre de esquemas, orientado a documentos base de datos que usa archivos planos simples que contienen objetos JSON. Esto no tiene requisitos de , excepto el nodo y un sistema de archivos . El rendimiento debe ser determinado una vez que se implemente completamente .
+13

Persistencia no se ha actualizado desde marzo de 2010 y está en la versión 0.0.4, por lo que parece que podría haber sido abandonado. – lacker

15

Me gusta mucho CouchDB. Es un poco una curva de aprendizaje, pero las vistas son realmente poderosas una vez que entiendes cómo usarlas. Hay un módulo llamado cradle on github y npm con el que es realmente fácil trabajar. No he podido comprobar qué tan rápido es, pero es realmente flexible (también puede acceder a sus datos en un navegador si lo desea).

El principal problema aquí es qué diseño de base de datos tiene sentido para su aplicación. ¿Tiene datos que son en gran medida de valor clave en la naturaleza? Si es así, usa Redis. ¿Tiene datos donde no todos los documentos tienen necesariamente los mismos campos? Si es así, use una base de datos NoSQL como CouchDB.

La siguiente peor cosa para usar una base de datos de bloqueo es utilizar una base de datos incorrecta para sus datos. CouchDB es administrado por Apache, por lo que sabe que es de buena calidad, pero no tiene sentido usarlo si sus datos tienen más sentido en una tabla SQL o en un simple almacén de clave-valor.

Piensa en tu caso de uso. ¿Es más probable que quiera realizar una búsqueda de texto completo, solo obtenga datos por clave u obtenga gamas de documentos que tengan atributos similares?

3

No estoy seguro de que la solución correcta sea centrarse únicamente en asignar una base de datos a su pila web, sino también considerar los requisitos específicos de la aplicación.

¿Está analizando feeds de Twitter u otros datos de alto volumen para patrones, pero no necesita soporte transaccional? Luego elige algo realmente rápido.

¿Simplemente desea almacenar información realmente básica en algunas tablas y actualmente no es una aplicación "centrada en la empresa"?Luego elige algo interesante para aprender.

Tal vez va a almacenar datos que son realmente importantes para un cliente, robustos, deben ser transaccionales, y tener replicación en vivo para instalaciones de alojamiento remoto, etc. Luego, tal vez vea algo como postgresql. No se reflejaría también, pero el controlador node.js funciona bastante bien y, si no tienes miedo a SQL, obtienes lo que deseas con bastante facilidad.

En cuanto a mi propia opinión, creo que ir con una pila más nueva como node.js (frente a frameworks tradicionales en php/java) agrega suficiente "nueva" complejidad que no se deben agregar capas adicionales a la vez. Este es un buen artículo que discute que:

http://nodeguide.com/convincing_the_boss.html

1

sucia es otra de archivo plano almacén de claves-valor. Como su nombre lo indica, es una solución rápida y sucia pero eficiente para casos simples. No soy el autor :)

2

voy a hablar de mi experiencia: CouchDB viene con una curva de aprendizaje definido, mientras que M ongoDB Me pareció muy fácil de aprender y configurar. Nunca he usado redis. Sugiero MongoDB, pero tal vez fanfrisismo descarado. No tengo números, solo afirma que es fácil de usar.

0

Encontré CouchDB muy fácil de dominar. Hay muchos libros electrónicos disponibles en Internet que le enseñarán cómo usar CouchDB con Node.js.

Encontré this book muy útil para aprender CouchDB.

Para usar CouchDB con Node.js, utilizo el módulo NANO.

CouchDB se puede alojar en Iriscouch o Cloudant.

Cuestiones relacionadas