base de données node.js [fermée]

115

Je recherche une base de données à associer à une application node.js. Je suppose qu'un db json / nosql serait préférable à un DB relationnel [je peux me passer de toute discordance d'impédance json / sql]. Je considère:

  • canapé
  • mongodb
  • redis

Quelqu'un a-t-il des vues / histoires de guerre concernant la compatibilité / la déployabilité de ce qui précède avec node.js? Des favoris clairs?

Justin
la source
2
Je pense qu'il serait utile de répondre à la question si des exigences encore plus larges sont mentionnées. Chaque DB a ses avantages, ses inconvénients et sa spécialité. Faites-nous savoir les spécifications!
Samyak Bhuta

Réponses:

79

Je suis le développeur du pilote mongodb pour node.js. J'utilise mongodb pour mes propres projets et j'ai été très satisfait des performances de mongodb.

Pilote Mongodb pour node.js

(Prise sans vergogne) N'hésitez pas à poser des questions sur le pilote à

Groupe Google pour le pilote mongodb

ou ici à Stackoverflow

Amusez-vous avec node.js. J'adore la plateforme: D

christkv
la source
1
regardez également mongoose, qui est un ORM assez sympa qui repose sur / utilise le pilote
mongodb
2
Nous utilisons Node.js + MongoDB depuis un certain temps et cela se passe très bien. Et bravo à @christkv, le pilote est solide comme le roc et ne vous décevra pas. Nous avons déployé facilement node.js / express.js + mongodb sur EC2. Notez également que nous n'utilisons pas Mongoose. En parlant de défis (en supposant que vous soyez déjà bon chez Node), vous devez être bon dans la manière Mongo de faire les choses (interrogation et agrégation) pour tout développement sérieux d'application ou de service. Apprendre en quoi Mongo est différent des autres bases de données serait vraiment à vous de commencer si vous êtes encore en phase d'évaluation.
Samyak Bhuta
d'après ce que je comprends, certaines fonctionnalités vraiment intéressantes arrivent pour accélérer l'agrégation dans mongodb. L'une d'elles concerne les fonctions d'agrégation natives. slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011 et aussi un passage possible à v8 au lieu de spidermonkey pour le moteur javascript qui permettra à chaque commande map-reduction de s'exécuter dans son propre thread (bye bye singlethreaded map-reduction )
christkv
25

Bien que votre choix dépende beaucoup des fonctionnalités que vous recherchez, j'apprécie vraiment CouchDB pour son environnement JavaScript natif. Les données et les vues sont écrites en JavaScript, donc cela correspond très bien à node.js à mon avis.

Il existe également différentes bibliothèques clientes disponibles, certaines sont plutôt de bas niveau, d'autres vraiment très abstraites.

Mais comme je l'ai dit, vous devriez également penser aux fonctionnalités dont vous avez besoin pour votre base de données.

b_erb
la source
18

Redis est un choix populaire. Ce que vous recherchez, c'est un pilote de base de données qui ne bloque pas.

Les bases de données que vous avez répertoriées sont toutes très différentes. Redis prend l'idée des stockages clé-valeur et s'exécute avec, en ajoutant une variété de types de données et de méthodes d'interrogation des données. Les gens notent souvent que redis s'échelonne aussi très bien; ce qui signifie qu'il a des frais généraux très faibles malgré sa capacité à performer.

Voici une liste des modules de base de données disponibles: http://wiki.github.com/ry/node/modules#database

Jökull
la source
Oui Redis est génial, mais il semble que nous pouvons stocker des données binaires mais ne pouvons pas les récupérer! Au moins, je n'ai pas trouvé de commande Redis pour les données binaires.
AppleGrew
Vraiment? J'avais l'habitude de stocker des données binaires (en utilisant la classe Buffer de Node) et cela fonctionnait bien. Quelle version de Redis / Node?
DanielS le
12
Par défaut, node_redis renverra des chaînes JavaScript pour toutes les commandes. Pour obtenir des tampons à la place, créez un client avec createClient (port, hôte, {return_buffers: true});
Matt Ranney
4
@MattRanney, vous économisez m'a permis de gagner des heures de plus! Je n'ai vu cela nulle part dans la documentation de node-Redis et littéralement coulé dans le temps 5 heures. Mon appréciation est sans limite en ce moment.
ghayes
eh bien tout sonne bien en théorie mais prenons un exemple pratique, vous avez une API JSON que vous interrogez toutes les 20 secondes qui renvoie un tableau, vous voulez pouvoir mettre cela en cache, iriez-vous toujours avec Redis? je dois aussi faire une recherche floue dans ce tableau
PirateApp
15

J'aime vraiment CouchDB. C'est un peu une courbe d'apprentissage, mais les vues sont vraiment puissantes une fois que vous comprenez comment les utiliser. Il existe un module appelé cradle sur github et npm avec lequel il est vraiment facile de travailler. Je n'ai pas pu tester sa rapidité, mais c'est vraiment flexible (vous pouvez également accéder à vos données dans un navigateur si vous le souhaitez).

Le problème majeur ici est de savoir quelle conception de base de données convient à votre application. Disposez-vous de données qui sont en grande partie de nature clé? Si tel est le cas, utilisez Redis. Avez-vous des données où tous les documents n'ont pas nécessairement les mêmes champs? Si tel est le cas, utilisez une base de données NoSQL comme CouchDB.

La deuxième pire chose à utiliser une base de données bloquante est d'utiliser la mauvaise base de données pour vos données. CouchDB est géré par Apache, vous savez donc qu'il est de bonne qualité, mais cela n'a pas de sens de l'utiliser si vos données ont plus de sens dans une table SQL ou un simple magasin clé-valeur.

Pensez à votre cas d'utilisation. Serez-vous plus susceptible de vouloir effectuer une recherche en texte intégral, simplement obtenir des données par clé ou obtenir des plages de documents ayant des attributs similaires?

beatgammit
la source
8

Pourrait vouloir vérifier Persistence , système de persistance / base de données de haut niveau pour node.js.

de thechangelog.com :

La persistance est un projet permettant à une API de haut niveau de conserver des données entre les exécutions de processus. L'objectif est de prendre en charge des backends faciles à utiliser, puissants, flexibles ou tout ce qui précède si possible.

Les bases de données prises en charge comprennent:

  • PostgreSQL - Une base de données relationnelle au niveau de l'entreprise. Le pilote est implémenté en JavaScript pur et communique via TCP en utilisant le protocole filaire PostgreSQL.
  • Sqlite3 - Une base de données relationnelle simple, rapide et sans serveur. Ce pilote est un wrapper autour du programme de ligne de commande sqlite3. Cela nécessite que sqlite3 soit dans le chemin. La communication est extrêmement rapide, mais les types ne sont pas très précis. Il n'y a que des chaînes et des valeurs nulles renvoyées.
  • MongoDB - Une base de données évolutive, hautes performances, open source, sans schéma et orientée document. Ce pilote implémente également le protocole filaire en JavaScript et communique avec le serveur via TCP.
  • JSON-DB - Une base de données système sans schéma et orientée document qui utilise de simples fichiers plats contenant des objets JSON. Cela n'a aucune exigence à l'exception d'un nœud et d'un système de fichiers. Les performances doivent être déterminées une fois qu'elles sont pleinement mises en œuvre.
Gary S. Weaver
la source
13
La persistance n'a pas été mise à jour depuis mars 2010 et est sur la version 0.0.4, il semble donc qu'elle ait pu être abandonnée.
manque
5

Avertissement: je suis l'auteur.

Jetez peut-être un coup d'œil à BarricaneDB annoncé ici .

abeille fanée
la source
3

Je ne suis pas sûr que la bonne solution soit de se concentrer uniquement sur le mappage d'une base de données sur votre pile Web, mais plutôt sur les exigences spécifiques à l'application.

Analysez-vous les flux Twitter ou d'autres données à volume élevé pour des modèles, mais n'avez pas besoin de support transactionnel? Ensuite, choisissez quelque chose de très vite.

Voulez-vous simplement stocker des informations vraiment basiques dans quelques tableaux et ce n'est actuellement pas une application "axée sur l'entreprise"? Ensuite, choisissez quelque chose de cool à apprendre.

Peut-être que vous allez stocker des données vraiment importantes pour un client, robustes, qui doivent être transactionnelles, et avoir une réplication en direct vers des installations d'hébergement distantes, etc. Alors peut-être regarder quelque chose comme postgresql. Cela ne refléterait pas non plus, mais le pilote node.js fonctionne plutôt bien et si vous n'avez pas peur de sql, il obtient ce que vous voulez assez facilement.

Quant à ma propre opinion, je pense qu'opter pour une nouvelle pile comme node.js (par rapport aux frameworks traditionnels en php / java) ajoute suffisamment de "nouvelle" complexité pour ne pas ajouter de couches supplémentaires en même temps. C'est un bon article qui explique que:

http://nodeguide.com/convincing_the_boss.html

qooleot
la source
2

Je vais parler de mon expérience: CouchDB est livré avec une courbe d'apprentissage définie, tandis que MongoDB m'a semblé très facile à apprendre et à configurer. Je n'ai jamais utilisé de redis. Je suggère MongoDB - mais ce fanboyisme peut-être éhonté - je n'ai pas de chiffres, hein, seulement des revendications de facilité d'utilisation.

RoseÉléphantsOnParade
la source
1

dirty est encore un autre magasin de valeurs-clés de fichier plat. Comme son nom l'indique, c'est une solution rapide et sale mais performante pour les cas simples. Je ne suis pas l'auteur :)

nponeccop
la source
0

J'ai trouvé CouchDB très facile à maîtriser. Il y a des ebooks de lots disponibles sur Internet qui vous apprendra comment utiliser CouchDB avec Node.js .

J'ai trouvé ce livre très utile pour apprendre CouchDB.

Pour utiliser CouchDB avec Node.js, j'utilise le module NANO .

CouchDB peut être hébergé sur Iriscouch ou Cloudant .

Shekhar
la source