Registrar no arquivo ou na tabela do banco de dados?

12

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 BYpara 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.

ChrisW
fonte
3
Você precisa separar as informações usadas para tomar decisões de negócios das informações gerais de log. Armazene tudo o que será usado posteriormente pelo seu aplicativo no banco de dados e os demais itens nos arquivos de log.
tom
1
Se você estiver usando um pacote conhecido como o log4net - e provavelmente seria uma boa ideia, em vez de criar o seu próprio -, deve ser apenas uma questão de mudar a configuração para fazer isso. @ tom - a separação é boa, mas por que não simplesmente ter dois bancos de dados, um para dados ativos e outro para registros de arquivamento etc.?
perfil completo de Julia Hayward
2
O OP diz que é para faturamento mensal - então eu esperava que a aplicação da lógica de faturamento em um banco de dados fosse muito mais fácil do que arquivos simples?
perfil completo de Julia Hayward
1
Você usou o termo "SQL" quando quis dizer "banco de dados". Fiz algumas correções. SQL é uma linguagem usada para ler e gravar em bancos de dados. MS SQL Server é o nome de um RDBMS. "SQL" por si só não significa "banco de dados do MS SQL Server".
Tulains Córdova
1
@gnat Eu não acho que isso seja uma duplicata: o outro era sobre erros de log, enquanto isso é sobre o uso de log para cobrança (e, neste caso, a resposta aprovada e votada e aceita era usar um RDBMS).
23416 ChrisW

Respostas:

13

Como você está usando essas informações para fins de cobrança, não vejo por que você não as deseja no banco de dados, onde elas podem ser facilmente consultadas, agregadas, relatadas e juntadas a outros dados.

Também acho muito mais fácil manter uma única tabela de banco de dados contendo as informações de log do que um monte de arquivos de log separados. O mesmo acontece com a sua preocupação com a carga no servidor - há maneiras muito melhores de lidar com isso do que recorrer a manter os dados em arquivos simples.

A terceira opção, a propósito, é fazer as duas coisas. Use o banco de dados para a maioria das necessidades, mas tenha o arquivo de log para fins de auditoria.

GrandmasterB
fonte
3
Outro bônus ao usar um banco de dados é utilizar gatilhos para determinados logs. Nenhum código adicional seria necessário. Se os dados forem inseridos na tabela A, insira a mensagem de log X.
Greg Burghardt