Estou tentando configurar um pequeno aplicativo de registro de dados no linux. Os dados chegam via porta serial e, a partir daí, devem ser bombeados para o registro e a exibição gráfica.
A funcionalidade de log existe para fins de inicialização da funcionalidade de gráficos, após uma reinicialização.
Os dados chegam a cada segundo e são compostos por 1 número de precisão de 5 dígitos decimais e devem ser registrados por 2 anos. Meu espaço livre atual é de cerca de 15 GB.
As linguagens do projeto até agora são bash e python.
Meus objetivos são criar um sistema de registro simples, mas robusto (talvez alguns backups em tempo real para uma unidade flash?), Que também seja rápido e fácil de ler em python e gravar em bash.
O SQLite é adequado para isso (nunca o usei)? É um arquivo de texto na minha casa diretório adequado para isso?
Respostas:
Ambas as opções parecem válidas para mim. Nesses casos, uma regra útil a ser aplicada é fazer a coisa mais simples possível . Os arquivos de texto são mais fáceis de começar e devem funcionar razoavelmente bem, pelo menos no começo. Quando surgirem requisitos que sejam mais satisfeitos usando um banco de dados, será trivial importá-los. Usando essa estratégia, você adia as decisões de design pelo maior tempo possível (mas não mais do que isso). Como tal, você não faz um trabalho desnecessário. Quando, se alguma vez for necessário, você terá uma compreensão muito melhor do que exatamente é necessário. Portanto, é mais provável que você construa a Coisa Certa e não perca tempo construindo a Coisa Errada.
fonte
Eu diria que, dados os requisitos de robustez e longevidade, um arquivo de texto antigo simples é uma escolha melhor. Como outros observaram, sua taxa de dados não é alta; Além disso, seu pós-processamento está todo offline no sistema de registro, para que você não precise gravar seus dados da maneira mais eficiente, pois poderá lê-los novamente quando quiser.
Um sistema de arquivos é um banco de dados (embora um degenerado) e os anexos aos arquivos de texto são muito leves nos recursos do sistema. Seria difícil vencer
para atividade mínima de chamada do sistema. Além disso, os arquivos de texto são muito mais robustos diante de corrupção interna do que um sqlite db e, especialmente, um arquivo pickle.
Suponho que seu aplicativo seja um sensor remoto e autônomo, em algum lugar não fácil de obter para um operador. Nesse caso, a solução de menor tecnologia deve ser preferida.
fonte
cron
trabalho, economizando espaço em disco. AssimComo @gbjbaanb apontou, o SQLite "não foi projetado para inserir muitos registros em alta velocidade".
Eu diria que 1 número / 1 segundo não é de alta velocidade se você mantiver a conexão com o banco de dados aberta. E isso deve funcionar razoavelmente bem, mas os logs geralmente são feitos em arquivos, essa solução é mais convencional e talvez elegante devido a isso.
Eu usava arquivos de texto e criava um novo todo mês. Você pode compactar e / ou excluir arquivos antigos depois de algum tempo, se o espaço no disco rígido for um problema.
Se "A funcionalidade de log estiver disponível para fins de inicialização da funcionalidade de gráficos, após uma reinicialização". e você só precisa de uma janela de tempo com os últimos n elementos , pode adicionar um
finally
bloco ao seu código e usá-lopickle
emdump
algumas estruturas de dados eload
depois da reinicialização. Mas certifique-se de que a reinicialização esteja realmente permitindo que você faça o que precisa.Essa é provavelmente a solução que requer menos recursos e se encaixa melhor aos seus requisitos.
fonte
Não. O SQLite é uma ótima ferramenta, mas não foi projetado para inserir muitos registros em alta velocidade.
A melhor solução aqui é algo que pode ser anexado rapidamente, e isso é um arquivo. Esse arquivo pode ser localizado em qualquer lugar que você quiser; no Linux, eles geralmente são colocados em / var / log (como alguns administradores preferem colocar / var em uma partição separada, portanto, se um aplicativo não autorizado gravar muitos dados, ele não trava o sistema operacional ao preencher o disco).
Depois que os dados são gravados, você pode escrever uma ferramenta que lê os arquivos de log, os importa para um banco de dados SQLite e o usa para gerar relatórios.
Como alternativa, use uma ferramenta existente, como o Nagios . Escreva um plug-in para ele (se você não puder configurá-lo para reconhecer seus dados diretamente no arquivo de log) e use-o para monitorar e gerar relatórios.
fonte
Sim. SQLite é apenas um arquivo binário. Você só precisa ter um esqueleto vazio para o seu banco de dados uma vez e, em seguida, é possível anexar dados ao arquivo binário para preencher o "banco de dados".
Em uma antiga empresa, implementamos isso no sistema operacional Symbian (usando a linguagem c ++), fazendo algum tipo de registro também. Infelizmente, isso foi há um tempo atrás e não me lembro dos detalhes.
fonte