Qual a base de dados NoSQL que devo usar para registar?

Tem alguma experiência em aceder às bases de dados NoSQL para aplicações escaláveis? Eu fiz algumas pesquisas em bases de dados NoSQL para registro e descobri que MongoDB parece ser uma boa escolha. Além disso, eu encontrei log4mongo-net o que parece ser uma opção muito simples.

Recomendaria este tipo de abordagem? Há mais alguma sugestão?

Author: Dan Atkinson, 2012-05-10

3 answers

Decidi rever esta resposta aceite, pois o estado da arte mudou significativamente nos últimos 18 meses, e existem alternativas muito melhores.

Nova Resposta

MongoDB é uma opção sub-par para uma solução de corte escalável. Existem as razões usuais para isso (desempenho de escrita sob carga, por exemplo). Eu gostaria de apresentar mais uma, que é que ele só resolve um único caso de uso em uma solução de registro.

Uma solução de Registo forte precisa de cobrir pelo menos as seguintes fases:

  • colecção
  • transporte
  • processamento
  • armazenamento
  • procura
  • visualização

MongoDB como uma escolha só resolve o caso de Uso de armazenamento (embora um pouco mal). Uma vez analisada a cadeia completa, existem soluções mais adequadas.

@KazukiOhta menciona algumas opções. A minha solução preferida nestes dias envolve:

A utilização subjacente da ElasticSearch para armazenamento de dados de log utiliza a actual melhor solução de breed NoSQL para o registo e pesquisa do caso de Utilização. O facto de o Logstash-Forwarder / Logstash / ElasticSearch / Kibana3 estão sob o guarda-chuva de ElasticSearch torna um argumento ainda mais convincente.

Uma vez que o Logstash também pode funcionar como um proxy de grafite, uma cadeia muito semelhante pode ser construída para o problema associado de recolher e analisar métricas (não apenas logs).

Resposta Antiga

MongoDB coleções Cobertas são extremamente populares e adequados para o registo , com o bónus adicional de ser 'menos esquema', que normalmente é um ajuste semântico para registar. Muitas vezes só sabemos o que queremos logar bem em um projeto, ou depois de certas questões foram encontradas na produção. As bases de dados relacionais ou esquemas estritos tendem a ser difíceis de mudar nestes casos, e as tentativas de torná-los "flexíveis" tendem apenas a torná-los "lentos" e difíceis de usar ou entender.

Mas se quiser gerir os seus registos no escuro, ter lasers a funcionar e fazer parecer que é do espaço, há sempre o Graylog2 que é o que eu quero. usa o MongoDB como parte de sua infra-estrutura geral, mas fornece muito mais em cima, como um formato comum, extensível, um servidor de coleta de log dedicado, arquitetura distribuída e um funky UI.
 50
Author: yamen, 2014-02-10 01:30:52

Já vi muitas empresas a usaro MongoDB para armazenar registos de aplicações. Sua schema-freeness é realmente flexível para logs de aplicação, em que schema tende a mudar de tempo para tempo. Além disso, seu recurso Caped Collection é realmente útil porque ele remove automaticamente os dados antigos para manter os dados encaixados na memória.

As pessoas agregam os registos por grupos normais ou MapReduce, mas não é assim tão rápido. Especialmente o MapReduce de MongoDB só funciona dentro de um único thread e sua execução JavaScript é enorme. O novo quadro de agregação {[5] } pode resolver este problema.

Quando você usa o MongoDB para o registo, a preocupação é a contenção de bloqueio {[[3]} através de 'high write throughputs'. Embora a inserção de MongoDB seja estilo fogo-e-esquecer por padrão, chamar um monte de inserir() causa um pesado bloqueio de escrita. Isso pode afetar o desempenho da aplicação, e impedir que os leitores agregar / filtrem os registros armazenados.

Uma solução pode estar a utilizar o log collector framework tal como Fluentd, Logstash , ou Flume . Estes daemons devem ser lançados em todos os nós de aplicação, e leva os logs dos processos app.

Fluentd plus MongoDB

Eles guardam os registos e assíncronamente escrevem os dados para outros sistemas como o MongoDB / PostgreSQL / etc. A escrita é feita por lotes , então é muito mais eficiente do que escrever diretamente a partir de aplicativos. Link descreve como colocar os logs em Fluentd do programa PHP.

Aqui estão alguns tutoriais sobre MongoDB + Fluentd. O problema do MongoDB é que começa a abrandar quando o volume de dados excede o tamanho da memória. Nessa altura, tu pode mudar para outras soluções como Apache Hadoop ou Cassandra . Se você tiver uma camada de registro distribuída mencionada acima, você pode imediatamente mudar para outra solução à medida que você cresce. Este tutorial descreve como armazenar logs em HDFS usando Fluentd.
 18
Author: Kazuki Ohta, 2012-12-28 05:08:59

Deve especificar o tipo de mensagens de registo que a sua aplicação produz. Se você está apenas registrando lotes e lotes de mensagens de log simples, MongoDB é uma escolha muito boa, uma vez que balança tão bom. Mas se você precisar de coisas complexas de autenticação ou muita hierarquia, eu usaria um rdbms tradicional.

 0
Author: Chris, 2012-05-10 00:02:38