Hallo,
ich habe einen Server auf dem täglich Dateien von extern einlaufen. Diese Dateien enthalten eine fortlaufende Nummer, so dass man ziemlich leicht erkennen kann, ob eine Datei zwischen drin fehlt. Das Scannen der Dateien nach den entsprechenden Daten ist inzwischen gelöst, dank eurer Hilfe in diesem Thread --> viewtopic.php?f=1&t=48979
Nun ist die Frage wie ich die Lückenerkennung implementiere. Das Problem ist nämlich das die Dateien nicht schön chronologisch einlaufen, so dass temporär immer wieder Lücken bestehen. Zum Beispiel können heute die Dateinummern 5010, 5011, 5013 geliefert werden und die 5012 wird morgen nachgeliefert. Ich möchte also erst eine Fehlermeldung erhalten, wenn eine Lücke z.B. nach 3 Tagen nicht geschlossen wird.
Ich muss also täglich alle neuen Dateien scannen und die Dateinummer und den Zeitstempel speichern. Wo würdet ihr diese Informationen ablegen??? In einer SQLite Datenbank oder was kommt da noch in Frage?
Theoretische Überlegungen zur Identifizierung von Lücken in Zahlenreihen
-
- User
- Beiträge: 492
- Registriert: Mittwoch 13. November 2019, 08:38
Die sauberste Lösung ist die Datenbank. Ich weiß ja nicht um wie viele Daten es sich handelt, aber damit bist du auf der sicheren Seite.
Die Datenmenge ist überschaubar. Das sind vielleicht 20-30 Dateien am Tag.
Es würde auch reichen, wenn man die gesammelten Daten (also Dateinummer und Zeitstempel) nur ca. 60 Tage aufhebt. Ich bin an einer möglichst einfachen Lösung interessiert. Das Script soll nur zur Überwachung dienen, damit man notfalls eine Dateinummer nachfordern kann. Eine SQLite DB könnte da vielleicht schon zu viel sein, ist aber aktuell die Einzige Idee die ich habe.
Es würde auch reichen, wenn man die gesammelten Daten (also Dateinummer und Zeitstempel) nur ca. 60 Tage aufhebt. Ich bin an einer möglichst einfachen Lösung interessiert. Das Script soll nur zur Überwachung dienen, damit man notfalls eine Dateinummer nachfordern kann. Eine SQLite DB könnte da vielleicht schon zu viel sein, ist aber aktuell die Einzige Idee die ich habe.
Das überzeugt mich. Bei den paar Werten berechne ich das gleich live.
Ist es Sinnvoll die Daten in verschachtelten Listen zu speichern? Hier mal ein Beispiel mit echten Daten.
Der zweite Wert ist der Zeitstempel von
Wie finde ich nun effektiv die Lücken? Baue ich mir eine weitere Liste von 4608 bis 4628 und vergleiche die dann?
Ist es Sinnvoll die Daten in verschachtelten Listen zu speichern? Hier mal ein Beispiel mit echten Daten.
Code: Alles auswählen
[[4608, 1592566356.4538305], [4609, 1592566366.5797093], [4610, 1592797720.3328161], [4611, 1592797725.4197545], [4612, 1592797728.3757188], [4613, 1592797736.5196204], [4614, 1592797744.997518], [4617, 1592797751.359441], [4618, 1592797755.1843948], [4619, 1592797773.5231733], [4620, 1592797761.1663225], [4621, 1592797767.3692477], [4622, 1592797780.3690906], [4623, 1592797808.783747], [4624, 1592797793.055937], [4625, 1592797798.2428744], [4626, 1592797786.20402], [4627, 1592797801.8178313], [4628, 1592797815.5916648]]
Code: Alles auswählen
os.stat(filename).st_mtime]
- __blackjack__
- User
- Beiträge: 13242
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@16_Bit: Du brauchst doch eigentlich nur die Nummern die ein gewisses Alter erreicht haben in einem `set()` und die Nummer der jüngsten Datei die das Alter noch nicht erreicht hat. Und dann kannst Du alle von der ältesten Nummer im `set()` bis zu der jüngsten die noch im Zeitraum liegt, prüfen ob die im `set()` fehlt. Falls ja, ALARM!
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Ich würde es so machen: Zum Zeitpunkt Null lässt du das Skript einmalig laufen und berechnest für jede identifizierte Lücke ein Fälligkeitsdatum von jetzt+3Tage. Das ist Index, den du dir zum Beispiel in einer Json-Datei merkst.
Anschließend lässt du das Skript in festen Zeitabständen immer wieder laufen, schaust, ob die fälligen Dateien eingetroffen sind, mahnst die überfälligen an und schreibst die, die noch im Zeitrahmen sind (inkl. neuer) wieder in die Index-Datei; bei den "Altlasten" natürlich mit dem alten Fälligkeitsdatum, bei neuen mit einem neuen. Am Anfang wirst du dadurch Dateien übersehen, die bereits zum Anfangszeitpunkt bereits in weniger als drei Tagen fällig oder sogar schon überfällig sind. Das stellt sich aber nach Ablauf der Frist dann automatisch ein und du solltest eine brauchbare Heuristik erhalten.
Das erscheint mir konzeptuell leichter zu verstehen, als eine intelligentere Lösung, bei der man sich genau anhand von 'stat' oder so anschaut, wann die "Nachbardateien" angekommen sind und daraus das exakte Fälligkeitsdaten für die fehlenden Dateien zu bestimmen.
Anschließend lässt du das Skript in festen Zeitabständen immer wieder laufen, schaust, ob die fälligen Dateien eingetroffen sind, mahnst die überfälligen an und schreibst die, die noch im Zeitrahmen sind (inkl. neuer) wieder in die Index-Datei; bei den "Altlasten" natürlich mit dem alten Fälligkeitsdatum, bei neuen mit einem neuen. Am Anfang wirst du dadurch Dateien übersehen, die bereits zum Anfangszeitpunkt bereits in weniger als drei Tagen fällig oder sogar schon überfällig sind. Das stellt sich aber nach Ablauf der Frist dann automatisch ein und du solltest eine brauchbare Heuristik erhalten.
Das erscheint mir konzeptuell leichter zu verstehen, als eine intelligentere Lösung, bei der man sich genau anhand von 'stat' oder so anschaut, wann die "Nachbardateien" angekommen sind und daraus das exakte Fälligkeitsdaten für die fehlenden Dateien zu bestimmen.
Ich habe das jetzt leider nicht verstanden - könnte auch am mangelnden Schlaf liegen. Könntest du das, wenn es keine Umstände macht, noch mal mit anderen Worten erklären?__blackjack__ hat geschrieben: ↑Montag 22. Juni 2020, 11:57 @16_Bit: Du brauchst doch eigentlich nur die Nummern die ein gewisses Alter erreicht haben in einem `set()` und die Nummer der jüngsten Datei die das Alter noch nicht erreicht hat. Und dann kannst Du alle von der ältesten Nummer im `set()` bis zu der jüngsten die noch im Zeitraum liegt, prüfen ob die im `set()` fehlt. Falls ja, ALARM!