Banco de dados node.js [fechado]


115

Estou procurando um banco de dados para emparelhar com um aplicativo node.js. Estou assumindo que um banco de dados json / nosql seria preferível a um banco de dados relacional [posso fazer sem qualquer incompatibilidade de impedância json / sql]. Estou considerando:

  • couchdb
  • Mongodb
  • redis

Alguém tem alguma visão / história de guerra sobre compatibilidade / implantabilidade do acima com node.js? Algum favorito claro?


2
Acho que seria útil responder à pergunta se requisitos ainda mais amplos fossem mencionados. Cada DB tem suas próprias vantagens, desvantagens e especialidades. Deixe-nos saber as especificações!
Samyak Bhuta

Respostas:


79

Sou o desenvolvedor do driver mongodb para node.js. Estou usando o mongodb para meus próprios projetos e estou muito feliz com o desempenho do mongodb.

Driver Mongodb para node.js

(Plugue sem vergonha) Sinta-se à vontade para fazer qualquer pergunta sobre o driver em

Grupo do Google para o driver mongodb

ou aqui no Stackoverflow

Divirta-se com node.js. Eu absolutamente amo a plataforma: D


1
também olhe para mongoose, que é um ORM bastante bom que se baseia / usa o driver mongodb para node.js
taxilian

2
Estamos usando Node.js + MongoDB há algum tempo e está indo muito bem. E muitos parabéns para @christkv, o driver é sólido como uma rocha e não irá decepcioná-lo. Implementamos o node.js / express.js + mongodb no EC2 com facilidade. Além disso, observe que não estamos usando o Mongoose. Falando sobre desafios (supondo que você já seja bom no Node), você precisa ser bom no jeito Mongo de fazer as coisas (consultas e agregação) para qualquer aplicativo sério ou desenvolvimento de serviço. Aprender como o Mongo é diferente de outros bancos de dados seria realmente importante se você ainda estiver em estágios de avaliação.
Samyak Bhuta

Pelo que entendi, alguns recursos muito interessantes estão chegando para acelerar a agregação no mongodb. Um deles são as funções de agregação nativas. slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011 e também uma possível mudança para v8 em vez de spidermonkey para o mecanismo de javascript que permitirá que cada comando map-reduce seja executado em seu próprio thread (tchau bye single-threaded map-reduce )
christkv

25

Embora sua escolha dependa muito dos recursos que você está procurando, realmente aprecio o CouchDB por seu ambiente JavaScript nativo. Tanto os dados quanto as visualizações são escritos em JavaScript, portanto, se encaixam muito bem no node.js na minha opinião.

Existem também diferentes bibliotecas-cliente disponíveis, algumas são de baixo nível, outras realmente muito abstratas.

Mas, como eu disse, você também deve pensar sobre os recursos necessários para o seu banco de dados.


18

Redis é uma escolha popular. O que você está procurando é um driver de banco de dados que não bloqueie.

Os bancos de dados que você listou são todos muito diferentes. O Redis pega a ideia de armazenamentos de valores-chave e executa com ela, adicionando uma variedade de tipos de dados e formas de consultar dados. As pessoas costumam notar que o redis diminui muito bem também; o que significa que tem sobrecarga muito baixa, apesar de ter a capacidade de executar.

Aqui está uma lista de módulos de banco de dados disponíveis: http://wiki.github.com/ry/node/modules#database


Sim, o Redis é ótimo, mas parece que podemos armazenar dados binários, mas não podemos recuperá-los! Pelo menos não consegui encontrar nenhum comando Redis para dados binários.
AppleGrew

Realmente? Eu costumava armazenar dados binários (usando a classe Buffer do Node) e funcionou bem. Qual versão do Redis / Node?
DanielS

12
Por padrão, node_redis retornará strings JavaScript para todos os comandos. Para obter buffers em vez disso, crie um cliente com createClient (port, host, {return_buffers: true});
Matt Ranney de

4
@MattRanney, Você economizou apenas me salvou mais horas de escavação! Eu não vi isso em nenhum lugar nos documentos do node-Redis e literalmente perdi o tempo por 5 horas. Minha apreciação é sem limites neste momento.
ghayes

bem, tudo parece bom em teoria, mas dê um exemplo prático, você tem uma API JSON que consulta a cada 20 segundos que retorna um array, você quer ser capaz de armazenar isso em cache, você ainda usaria o Redis? também tenho que fazer uma pesquisa difusa por meio desta matriz
PirateApp

15

Eu realmente gosto do CouchDB. É um pouco uma curva de aprendizado, mas as visualizações são realmente poderosas quando você entende como usá-las. Existe um módulo chamado cradle no github e npm que é realmente fácil de trabalhar. Não consegui testar o quão rápido é, mas é muito flexível (você também pode acessar seus dados em um navegador se quiser).

O principal problema aqui é qual design de banco de dados faz sentido para sua aplicação. Você tem dados que são basicamente valores-chave por natureza? Nesse caso, use o Redis. Você possui dados em que nem todos os documentos têm necessariamente os mesmos campos? Nesse caso, use um banco de dados NoSQL como CouchDB.

A próxima coisa pior de usar um banco de dados de bloqueio é usar o banco de dados errado para seus dados. O CouchDB é gerenciado pelo Apache, então você sabe que é de boa qualidade, mas não faz sentido usá-lo se seus dados fizessem mais sentido em uma tabela SQL ou um armazenamento de valor-chave simples.

Pense em seu caso de uso. É mais provável que você queira fazer uma pesquisa de texto completo, apenas obter dados por chave ou obter intervalos de documentos com atributos semelhantes?


8

Pode querer verificar Persistência , persistência de alto nível / sistema de banco de dados para node.js.

de thechangelog.com :

Persistência é um projeto para permitir uma API de alto nível para dados persistentes entre execuções de processos. O objetivo é oferecer suporte a back-ends fáceis de usar, poderosos, flexíveis ou todos os itens acima, se possível.

Os bancos de dados suportados incluem:

  • PostgreSQL - Um banco de dados relacional de nível empresarial. O driver é implementado em JavaScript puro e se comunica por TCP usando o protocolo com fio PostgreSQL.
  • Sqlite3 - Um banco de dados relacional simples, rápido e sem servidor. Este driver é um wrapper em torno do programa sqlite3 de linha de comando. Requer que sqlite3 esteja no caminho. A comunicação é extremamente rápida, mas os tipos não são muito precisos. Existem apenas strings e nulos retornados.
  • MongoDB - um banco de dados escalonável, de alto desempenho, de código aberto, livre de esquemas e orientado a documentos. Este driver também implementa o protocolo wire em JavaScript e se comunica com o servidor por TCP.
  • JSON-DB - Um banco de dados orientado a documentos, livre de esquemas de sistema desenvolvido internamente que usa arquivos planos simples contendo objetos JSON. Isso não tem nenhum requisito, exceto um nó e um sistema de arquivos. O desempenho deve ser determinado depois de totalmente implementado.

13
A persistência não foi atualizada desde março de 2010 e está na versão 0.0.4, então parece que pode ter sido abandonada.
falta


3

Não tenho certeza se a solução correta é focar exclusivamente no mapeamento de um banco de dados para sua pilha da web, mas considerando também os requisitos específicos do aplicativo.

Você está analisando feeds do Twitter ou outros dados de alto volume em busca de padrões, mas não precisa de suporte transacional? Em seguida, escolha algo muito rápido.

Você deseja apenas armazenar algumas informações realmente básicas em algumas tabelas e atualmente não é um aplicativo "voltado para a empresa"? Em seguida, escolha algo legal para aprender.

Talvez você vá armazenar dados que são realmente importantes para um cliente, robustos, precisam ser transacionais e ter replicação ao vivo para instalações de hospedagem remotas, etc. Então, talvez olhe para algo como postgresql. Ele não espelharia tão bem, mas o driver node.js funciona muito bem e se você não tem muito medo de sql, ele obtém o que deseja dentro / fora com bastante facilidade.

Quanto à minha própria opinião, acho que usar uma pilha mais recente como node.js (versus frameworks tradicionais em php / java) é adicionar complexidade "nova" o suficiente para que não se deva adicionar camadas extras de uma vez. Este é um bom artigo que discute que:

http://nodeguide.com/convincing_the_boss.html


2

Falarei com minha experiência: o CouchDB vem com uma curva de aprendizado definida, enquanto o MongoDB é muito fácil de aprender e configurar. Eu nunca usei redis. Sugiro MongoDB - mas talvez aquele fanboyismo sem vergonha - não tenho números, heh, apenas afirmações de facilidade de uso.


1

sujo é outro armazenamento de valor-chave de arquivo simples. Como o nome sugere, é uma solução rápida e suja, mas eficiente para casos simples. Eu não sou o autor :)



0

Achei o CouchDB muito fácil de dominar. Há um monte de ebooks disponíveis na internet que vai te ensinar como usar CouchDB com Node.js .

Achei este livro muito útil para aprender o CouchDB.

Para usar o CouchDB com Node.js, uso o módulo NANO .

O CouchDB pode ser hospedado em Iriscouch ou Cloudant .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.