Qual a base de dados NoSQL que devo usar para registar?
3 answers
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:- Logstash-Forwarder para recolha e Transporte
- Logstash & Riemann para processamento
- pesquisa elastica para armazenamento e consultas
- Kibana3 para visualização
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.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.
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.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.