Estou desenvolvendo um aplicativo da web que usa o MS SQL para vários dados: incluindo usuários, contas de usuário, licenças de usuário, preços de licença, faturas.
Preciso registrar o uso do sistema em tempo real pelos usuários e usá-lo para o faturamento mensal: por exemplo, registre sempre que um usuário obtém uma página / URL específica e fatura os usuários no final do mês com base no número de páginas buscadas.
Devo gravar esses eventos de log em uma tabela no meu banco de dados MS SQL?
Devo gravar esses eventos de log em um arquivo de log não-SQL somente anexado?
Devo gravar esses eventos de log em um arquivo de log diferente para cada usuário?
Este não é um site de alto volume: por exemplo, um máximo de 10.000 usuários, cada um fazendo uma média de 5 eventos / dia registráveis => 50.000 eventos / dia = 30 eventos / minuto = 18.000.000 eventos / ano.
Estou perguntando porque qualquer uma das opções parece viável e não vejo se uma tem uma clara vantagem.
Os dados associados a um evento faturável são simples, por exemplo:
- ID do usuário (relacionamento de chave estrangeira com a tabela Usuários no SQL)
- Data e hora
- URL da página faturável
Minha própria resposta a esta pergunta é a seguinte:
Alguns benefícios de gravar o log em uma tabela de banco de dados:
- Integridade relacional: por exemplo, eventos registrados são associados a IDs de usuário válidos (definindo o ID do usuário como uma chave estrangeira entre as tabelas)
- Fácil de ler para cobrança: por exemplo,
SELECT COUNT GROUP BY
para obter uma contagem do número de eventos de log por usuário
Alguns benefícios de escrever no arquivo de log:
- Desempenho mais fácil: o SQL é usado com menos frequência, por exemplo, apenas para eventos de logon do usuário e principalmente usado para leitura
- Gerenciamento mais fácil: mais fácil arquivar dados antigos, por exemplo, no final do ano, movendo arquivos de log antigos em vez de excluir / arquivar do banco de dados
Por favor, deixe-me saber se minha resposta está errada; ou exagera a importância de algo; ou esqueceu alguma consideração importante.
E / ou informe-me qual é a sua resposta, se for diferente da minha.