Ich versuche, eine kleine Datenprotokollierungsanwendung unter Linux einzurichten. Die Daten kommen über die serielle Schnittstelle an und sollten von dort zur Protokollierung und zur grafischen Anzeige gepumpt werden.
Die Protokollierungsfunktion dient zu Initialisierungszwecken der Grafikfunktion nach einem Neustart.
Die Daten kommen jede Sekunde an und bestehen aus 1 5-Dezimalstellen-Genauigkeit. Sie sollten 2 Jahre lang protokolliert werden. Mein aktueller freier Speicherplatz beträgt ca. 15 GB.
Die Sprachen des Projekts sind bisher Bash und Python.
Mein Ziel ist es, ein einfaches, aber robustes Protokollierungssystem (möglicherweise einige Live-Backups auf einem Flash-Laufwerk?) Zu erstellen, das auch schnell und einfach aus Python zu lesen und aus Bash zu schreiben ist.
Ist SQLite dafür geeignet (ich habe es noch nie benutzt)? Ist eine Textdatei in meinem Home- Verzeichnis dafür geeignet?
Antworten:
Beide Optionen scheinen mir gültig zu sein. In solchen Fällen ist es eine nützliche Regel, die einfachste Sache zu tun, die möglicherweise funktionieren könnte . Textdateien sind einfacher zu handhaben und es wird erwartet, dass sie zumindest am Anfang einigermaßen gut funktionieren. Sobald Anforderungen auftreten, die mithilfe einer Datenbank besser erfüllt werden, ist es trivial, sie zu importieren. Mit dieser Strategie verschieben Sie Entwurfsentscheidungen so lange wie möglich (jedoch nicht länger). Als solches erledigen Sie keine unnötige Arbeit. Wann immer es benötigt wird, haben Sie ein viel besseres Verständnis dafür, was genau Sie brauchen. Daher ist es wahrscheinlicher, dass Sie das Richtige bauen und keine Zeit damit verschwenden, das Falsche zu bauen.
quelle
Ich würde sagen, dass angesichts der Anforderungen an Robustheit und Langlebigkeit eine einfache alte Textdatei die bessere Wahl ist. Wie andere angemerkt haben, ist Ihre Datenrate nicht hoch. Außerdem ist Ihre Nachbearbeitung vom Protokollierungssystem aus vollständig offline, sodass Sie Ihre Daten nicht auf die effizienteste Weise schreiben müssen, da Sie sie nach Belieben zurücklesen können.
Ein Dateisystem ist eine Datenbank (obwohl eine entartete), und das Anhängen an Textdateien schont die Systemressourcen. Es wäre schwer zu schlagen
für minimale Systemaufrufaktivität. Außerdem sind Textdateien angesichts interner Beschädigungen viel robuster als eine SQLite-Datenbank und insbesondere eine Pickle-Datei.
Ich vermute, dass Ihre Anwendung ein entfernter, unbeaufsichtigter Sensor ist, an den ein Bediener nicht leicht gelangen kann. In diesem Fall sollte die Lösung mit der niedrigsten Technologie bevorzugt werden.
quelle
cron
Jobs komprimieren können, wodurch Speicherplatz gespart wird. SoWie @gbjbaanb betonte, ist SQLite "nicht dafür ausgelegt, sehr viele Datensätze mit hoher Geschwindigkeit einzufügen".
Ich würde sagen, 1 Nummer / 1 Sekunde ist keine hohe Geschwindigkeit, wenn Sie die Verbindung zur Datenbank offen halten. Und das sollte einigermaßen gut funktionieren, aber Protokolle werden normalerweise für Dateien erstellt. Diese Lösung ist konventioneller und daher möglicherweise eleganter.
Ich würde Textdateien verwenden und jeden Monat eine neue erstellen. Sie können alte Dateien nach einiger Zeit komprimieren und / oder löschen, die für Sie geeignet sind, wenn der Festplattenspeicher ein Problem darstellt.
Wenn "Die Protokollierungsfunktion dient zu Initialisierungszwecken der Grafikfunktion nach einem Neustart." und Sie brauchen nur ein Zeitfenster mit den letzten n Elementen dann können Sie einen hinzufügen
finally
Block , um Ihren Code und die Verwendungpickle
zudump
einigen Datenstrukturen undload
sie nach dem Neustart. Stellen Sie jedoch sicher, dass Sie beim Neustart tatsächlich das tun können, was Sie benötigen.Dies ist wahrscheinlich die Lösung, die weniger Ressourcen benötigt und Ihren Anforderungen besser entspricht.
quelle
Nein. SQLite ist ein großartiges Tool, aber es ist nicht dafür ausgelegt, sehr viele Datensätze mit hoher Geschwindigkeit einzufügen.
Die beste Lösung hier ist etwas, an das schnell angehängt werden kann, und das ist eine Datei. Eine solche Datei kann sich an einem beliebigen Ort befinden. Unter Linux werden sie normalerweise in / var / log abgelegt (da einige Administratoren es vorziehen, / var auf einer separaten Partition abzulegen. Wenn eine betrügerische App viele Daten schreibt, stürzt sie nicht ab das Betriebssystem, wenn es die Festplatte füllt).
Sobald die Daten geschrieben sind, können Sie ein Tool schreiben, das die Protokolldateien liest, sie in eine SQLite-Datenbank importiert und für die Berichterstellung verwendet.
Alternativ können Sie ein vorhandenes Tool wie Nagios verwenden . Schreiben Sie ein Plugin dafür (wenn Sie es nicht so konfigurieren können, dass Ihre Daten direkt in der Protokolldatei erkannt werden) und verwenden Sie es für die Überwachung und Berichterstellung.
quelle
Ja. SQLite ist nur eine Binärdatei. Sie müssen nur einmal ein leeres Skelett für Ihre Datenbank haben, dann können Sie einfach Daten an diese Binärdatei anhängen, um die "Datenbank" zu füllen.
In einer früheren Firma haben wir dies für das Symbian-Betriebssystem (unter Verwendung der c ++ - Sprache) implementiert und auch eine Art Protokollierung durchgeführt. Leider ist das eine Weile her und ich kann mich nicht an die Details erinnern.
quelle