MongoDB para armazenar diferentes (esquema) de arquivos de log
Pergunta
Você acha que o uso de um MongoDB Json Banco de dados para armazenar os arquivos de log de aplicativo é uma boa ideia e por quê ?
A única vantagem para mim é o esquema de abstração, mas eu acho que também é uma fraqueza não podemos garantir a integridade de um arquivo de log.
Solução
Obviamente, eu sou preconceituoso (eu trabalho no MongoDB), mas eu acho que funciona muito bem para os logs.
Motivos:
- É rápido para inserções e atualizações...você pode fazer milhares por segundo
- Bem como consultas normais, você pode executar análises e gerar relatórios usando JavaScript.Você poderia ter um cron execução do trabalho nocturno que faz gostoso MapReduce coisas para seus registros.
- Você pode usar cobertas de coleções, que são da coleção que agir como filas, para mantenha apenas o mais recente N KBs/Mb/gb de logs
Eu não tenho certeza do que você quer dizer "garantir a integridade de um arquivo de log"...quer dizer que você está preocupado por não saber o que campos o documento que você está puxando tem?Se for assim, eu acho que você vai descobrir que é mais difícil lidar com null campos em um banco de dados relacional e muito mais flexível.
Veja também: o MongoDB post no blog de registo.
Outras dicas
Estou usando o MongoDB para armazenar logs de muitos aplicativos e está funcionando muito bem até agora.
Você pode querer dar uma olhada no Slides de uma apresentação sobre o comportamento do aplicativo de registro para MongoDBB que eu dei no Mongo SV e no último MongoDB SF Meetup para obter mais informações sobre o motivo pelo qual acho que é bom para o log, bem como para informações sobre bibliotecas para Java, Python, Ruby, Php e C# que suportam o registro do MongoDB.
Agora sou o principal comissário do Log4mongo-Java, Log4J Appenders for MongoDB. Então, provavelmente não é de surpreender que seja isso que estou usando.
Com relação à integridade do log, suponho que você quer dizer confiança de que ela não foi modificada depois que foi escrita. Uma opção que você tem, pelo menos com o log4mongo-Java, para armazenar eventos de registro em um banco de dados que requer autenticação. Isso limitaria até certo ponto o número de usuários que poderiam adicionar, excluir ou atualizar eventos.
Além disso, você pode configurar um escravo de replicação que está bem travado. Backups frequentes do escravo limitariam pelo menos o tempo durante o qual o conjunto de eventos registrados poderia ser modificado.