Estoy tratando de configurar una pequeña aplicación de registro de datos en Linux. Los datos llegan a través del puerto serie, y desde allí se deben bombear al registro y a la pantalla gráfica.
La funcionalidad de registro está allí para fines de inicialización de la funcionalidad de gráficos, después de un reinicio.
Los datos llegan cada segundo y se componen de 1 número de precisión de 5 dígitos decimales, y deben registrarse durante 2 años. Mi espacio libre actual es de unos 15 GB.
Los lenguajes del proyecto hasta ahora son bash y python.
Mis objetivos son hacer un sistema de registro simple pero robusto (¿tal vez algunas copias de seguridad en vivo en una unidad flash?), Que también es rápido y fácil de leer desde python y escribir desde bash.
¿SQLite es adecuado para esto (nunca lo he usado)? Es un archivo de texto en mi casa directorio adecuado para esto?
Respuestas:
Ambas opciones me parecen válidas. En tales casos, una regla útil para aplicar es hacer lo más simple que posiblemente pueda funcionar . Los archivos de texto son más fáciles de comenzar y se espera que funcionen razonablemente bien al menos al principio. Una vez que surgen requisitos que se satisfacen mejor utilizando una base de datos, será trivial importarlos. Con esta estrategia, pospone las decisiones de diseño el mayor tiempo posible (pero no más que eso). Como tal, no haces trabajo innecesario. Cuando, si alguna vez, será necesario, tendrá una mejor comprensión de qué es exactamente lo que necesita. Por lo tanto, es más probable que construyas lo correcto y no pierdas tiempo construyendo lo incorrecto.
fuente
Diría que, dados los requisitos de robustez y longevidad, un archivo de texto antiguo es una mejor opción. Como otros han notado, su velocidad de datos no es alta; Además, su procesamiento posterior está fuera de línea desde el sistema de registro, por lo que no necesita escribir sus datos de la manera más eficiente porque puede volver a leerlos cuando lo desee.
Un sistema de archivos es una base de datos (aunque degenerada), y los archivos de texto son muy ligeros en cuanto a recursos del sistema. Sería difícil de superar
para una actividad mínima de llamadas al sistema. Además, los archivos de texto son mucho más robustos frente a la corrupción interna que una base de datos sqlite y especialmente un archivo pickle.
Supongo que su aplicación es un sensor remoto y desatendido, en un lugar no fácil de conseguir para un operador. En ese caso, se debe preferir la solución de menor tecnología.
fuente
cron
trabajo, ahorrando espacio en disco. Me gusta estoComo señaló @gbjbaanb, SQLite "no está diseñado para insertar muchos registros a alta velocidad".
Yo diría que 1 número / 1 segundo no es de alta velocidad si mantiene abierta la conexión a la base de datos. Y eso debería funcionar razonablemente bien, pero los registros generalmente se realizan en archivos, esa solución es más convencional y quizás elegante debido a eso.
Usaría archivos de texto y crearía uno nuevo cada mes. Puede comprimir y / o eliminar archivos antiguos después de un tiempo que le convenga si el espacio en el disco duro es un problema.
Si "La funcionalidad de registro está allí para fines de inicialización de la funcionalidad de gráficos, después de un reinicio". y solo necesita una ventana de tiempo con los últimos n elementos, luego puede agregar un
finally
bloque a su código y usarlopickle
endump
algunas estructuras de datos yload
luego de reiniciar. Pero asegúrese antes de que el reinicio le permita hacer lo que necesita.Esa es probablemente la solución que requiere menos recursos y se ajusta más a sus requisitos.
fuente
No. SQLite es una gran herramienta, pero no está diseñada para insertar muchos registros a alta velocidad.
La mejor solución aquí es algo que se puede agregar rápidamente, y ese es un archivo. Tal archivo se puede ubicar en cualquier lugar que desee, en Linux generalmente se colocan en / var / log (ya que algunos administradores prefieren colocar / var en una partición separada, por lo que si una aplicación no autorizada escribe muchos datos, no se bloqueará el sistema operativo cuando llena el disco).
Una vez que se escriben los datos, puede escribir una herramienta que lea los archivos de registro, los importe en una base de datos SQLite y los use para generar informes.
Alternativamente, use una herramienta existente como Nagios . Escriba un complemento para él (si no puede configurarlo para reconocer sus datos directamente en el archivo de registro) y úselo para monitorear e informar.
fuente
Si. SQLite es solo un archivo binario. Solo necesita tener un esqueleto vacío para su base de datos una vez, luego puede agregar datos a ese archivo binario para llenar la "base de datos".
En una empresa anterior, hemos implementado esto para el sistema operativo Symbian (usando el lenguaje c ++), haciendo algún tipo de registro también. Lamentablemente esto fue hace un tiempo y no puedo recordar los detalles.
fuente