base de datos node.js [cerrado]

115

Estoy buscando una base de datos para emparejar con una aplicación node.js. Supongo que una base de datos json / nosql sería preferible a una base de datos relacional [puedo hacerlo sin ningún desajuste de impedancia json / sql]. Estoy considerando:

  • sofadb
  • mongodb
  • redis

¿Alguien tiene alguna opinión / historia de guerra sobre compatibilidad / implementación de lo anterior con node.js? ¿Algún favorito claro?

Justin
fuente
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 especialidad. ¡Háganos saber las especificaciones!
Samyak Bhuta

Respuestas:

79

Soy el desarrollador del controlador mongodb para node.js. Estoy usando mongodb para mis propios proyectos y estoy muy contento con el desempeño de mongodb.

Controlador mongodb para node.js

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

Grupo de Google para el controlador mongodb

o aquí en Stackoverflow

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

christkv
fuente
1
también mire la mangosta, que es un ORM bastante agradable que se basa en / usa el controlador mongodb para node.js
taxilian
2
Estamos usando Node.js + MongoDB desde hace bastante tiempo y va muy bien. Y felicitaciones a @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 Mongoose. Hablando de 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 o desarrollo de servicio serio. Aprender cómo Mongo es diferente de otras bases de datos sería realmente lo primero que debería hacer si aún se encuentra en las etapas de evaluación.
Samyak Bhuta
Por lo que tengo entendido, algunas características realmente interesantes están por venir para acelerar la agregación en mongodb. Uno de ellos son las funciones de agregación nativas. slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011 y también un posible cambio a v8 en lugar de spidermonkey para el motor javascript que permitirá que cada comando map-reduce se ejecute en su propio hilo (bye bye singlethreaded map-reduce )
christkv
25

Aunque su elección depende en gran medida de las características que desee, realmente aprecio CouchDB por su entorno JavaScript nativo. Tanto los datos como las vistas están escritos en JavaScript, por lo que, en mi opinión, se ajusta muy bien a node.js.

También hay diferentes bibliotecas cliente disponibles, algunas son de bajo nivel, otras realmente muy abstractas.

Pero como dije, también debe pensar en las características que necesita para su base de datos.

b_erb
fuente
18

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

Las bases de datos que enumeró son todas muy diferentes. Redis toma la idea de almacenamiento de valores clave y se ejecuta con ella, agregando una variedad de tipos de datos y formas de consultar datos. La gente suele notar que redis también se reduce muy bien; lo que significa que tiene una sobrecarga muy baja a pesar de tener la capacidad de funcionar.

Aquí hay una lista de módulos de base de datos disponibles: http://wiki.github.com/ry/node/modules#database

Jökull
fuente
Sí, Redis es genial, pero parece que podemos almacenar datos binarios, ¡pero no podemos recuperarlos! Al menos no pude encontrar ningún comando de Redis para datos binarios.
AppleGrew
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 en su lugar, cree un cliente con createClient (puerto, host, {return_buffers: true});
Matt Ranney
4
@MattRanney, ¡Me ahorraste, me ahorraste más horas de excavación! No vi esto en ninguna parte de los documentos de node-Redis y literalmente perdí 5 horas. Mi agradecimiento no tiene límites en este momento.
ghayes
bueno, todo suena bien en teoría, pero tome un ejemplo práctico, tiene una API JSON que consulta cada 20 segundos que devuelve una matriz, desea poder almacenar en caché esto, ¿seguiría usando Redis? también
tengo
15

Realmente me gusta 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 en github y npm con el que es muy fácil trabajar. No he podido probar qué tan rápido es, pero es realmente flexible (también puede acceder a sus datos en un navegador si lo desea).

El problema principal 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 por naturaleza? Si es así, use Redis. ¿Tiene datos en los que no todos los documentos tienen necesariamente los mismos campos? Si es así, use una base de datos NoSQL como CouchDB.

Lo siguiente peor a usar una base de datos de bloqueo es usar la 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 tuvieran más sentido en una tabla SQL o en un simple almacén de valores clave.

Piense en su caso de uso. ¿Será más probable que desee realizar una búsqueda de texto completo, solo obtener datos por clave u obtener rangos de documentos que tengan atributos similares?

beatgammit
fuente
8

Es posible que desee comprobar la persistencia , sistema de base de datos / persistencia de alto nivel para node.js.

de thechangelog.com :

La persistencia es un proyecto que permite una API de alto nivel para la persistencia de datos entre ejecuciones de procesos. El objetivo es respaldar backends que sean fáciles de usar, potentes, flexibles o todos los anteriores si es posible.

Las bases de datos admitidas incluyen:

  • PostgreSQL: una base de datos relacional de nivel empresarial. El controlador está implementado en JavaScript puro y se comunica a través de TCP mediante el protocolo de cable PostgreSQL.
  • Sqlite3: una base de datos relacional simple, rápida y sin servidor. Este controlador es un contenedor del programa sqlite3 de línea de comandos. Requiere que sqlite3 esté en la ruta. La comunicación es extremadamente rápida, pero los tipos no son muy precisos. Solo se devuelven cadenas y nulos.
  • MongoDB: una base de datos orientada a documentos, escalable, de alto rendimiento, de código abierto, sin esquemas. Este controlador también implementa el protocolo de cable en JavaScript y se comunica con el servidor a través de TCP.
  • JSON-DB: una base de datos orientada a documentos y sin esquema de sistema propio que utiliza archivos planos simples que contienen objetos JSON. Esto no tiene requisitos en absoluto, excepto un nodo y un sistema de archivos. El rendimiento se determinará una vez que se implemente por completo.
Gary S. Weaver
fuente
13
La persistencia no se ha actualizado desde marzo de 2010 y está en la versión 0.0.4, por lo que parece que se ha abandonado.
lacker
5

Descargo de responsabilidad: soy el autor.

Quizás eche un vistazo a BarricaneDB anunciado aquí .

fadedbee
fuente
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 en considerar los requisitos específicos de la aplicación.

¿Está analizando feeds de Twitter u otros datos de gran volumen en busca de patrones, pero no necesita soporte transaccional? Entonces elige algo realmente rápido.

¿Desea almacenar información realmente básica en unas pocas tablas y actualmente no es una aplicación "enfocada 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 en instalaciones de alojamiento remoto, etc. Entonces tal vez mire algo como postgresql. No se reflejaría tan bien, pero el controlador node.js funciona bastante bien y si no le tienes un miedo mortal a sql, obtiene lo que quieres con bastante facilidad.

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

http://nodeguide.com/convincing_the_boss.html

qooleot
fuente
2

Hablaré de mi experiencia: CouchDB viene con una curva de aprendizaje definida, mientras que MongoDB me pareció muy fácil de aprender y configurar. Nunca he usado redis. Sugiero MongoDB, pero tal vez ese fanboyismo descarado, no tengo números, je, solo afirmaciones de facilidad de uso.

RosaElefantesen desfile
fuente
1

dirty es otro almacén de valores-clave de archivo plano. Como sugiere su nombre, es una solución rápida y sucia pero eficaz para casos simples. No soy el autor :)

nponeccop
fuente
0

CouchDB me pareció muy fácil de dominar. Hay libros electrónicos lote disponible en el Internet que le enseñará cómo usar CouchDB con Node.js .

Encontré este libro muy útil para aprender CouchDB.

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

CouchDB se puede alojar en Iriscouch o Cloudant .

Shekhar
fuente