
Zur Beantwortung einer FrageICHgefragt amPaketüberfluss, gibt es Dateisysteme, in denen Daten „von Ende nach vorne“ oder „von unten nach oben“ statt von oben nach unten geschrieben werden?
Insbesondere suche ich nach einer (möglicherweise speziell dafür entwickelten) Möglichkeit, Protokolldateien in der Form „Neueste zuerst“ zu speichern (a lawie Blogs und Nachrichtenseiten organisiert sind (mit den aktuellsten Informationen ganz oben).
Gibt es ein solches Tier? Und wenn ja, was ist es und wo kann man es finden?
Antwort1
Was Sie verlangen, ist nicht nur ein „umgekehrtes“ Dateisystem. Sie wollen einDatensatzstrukturiert, „umgekehrtes“ Dateisystem, d. h. ein Datensatzdateisystem, bei dem der zuletzt hinzugefügte Datensatz zuerst in der Datei erscheint. Tatsächlich würde der umgekehrte Aspekt wahrscheinlich so implementiert werden: „Sie können einen Datensatz vor dem ersten vorhandenen Datensatz einfügen.“
Dateisystemschnittstellen, die man in den typischen Betriebssystemen von PCs findet (Unix, Windows und sogar exotischere), sind nur bytestrukturiert – sie haben kein Konzept von Datensätzen. Da haben Sie Pech gehabt.
Ein möglicher Ansatz wäre, jeden Protokolleintrag als separate Datei im Verzeichnis anzulegen. Dann durchlaufen Sie das Verzeichnis in umgekehrter Reihenfolge der Dateierstellungszeit oder in umgekehrter Reihenfolge der Namen, wenn Sie den Protokolleinträgen monoton ansteigende Namen geben. Da Sie wahrscheinlich eine große Anzahl von Protokolleinträgen haben, stellen Sie entweder sicher, dass Sie ein Dateisystem verwenden, das große Verzeichnisse gut unterstützt (z. B. sind unter Linux Reiserfs und Ext3 mit dieser dir_index
Funktion in Ordnung, Ext2 jedoch nicht), oder verwenden Sie Unterverzeichnisse (eines für die ersten 1000 Einträge, eines für die nächsten 1000 und so weiter).
Ein anderer Ansatz wäre, eine komplexere Datenbank zu verwenden, beispielsweise eine, die Sie in SQL abfragen können, und die Datensätze einfach in umgekehrter Reihenfolge ihrer Erstellung auszuwählen ( SELECT message FROM logs ORDER BY date DESC
).
Antwort2
Ich bin mir nicht ganz sicher, ob es keine gibt, aber ich habe noch nie davon gehört. Wenn es möglich wäre, hätte das meiner Meinung nach erhebliche Nachteile.
Das Voranstellen einer Datei erfordert im Allgemeinen eine vollständige Kopie der vorhandenen Daten. In einem Dateisystem können Sie dies möglicherweise durch das Hinzufügen eines Blocks am Anfang der Datei erledigen, aber dies verursacht dennoch einige kleinere Probleme. Blöcke mit freiem Speicherplatz müssten den freien Speicherplatz am Anfang behalten, sodass das Laufwerk höchstwahrscheinlich zusätzliche Suchvorgänge durchführen müsste, um den richtigen Speicherort zu finden.
Der Umgang mit freiem Speicherplatz auf dem Laufwerk würde beim Rückwärtsarbeiten sehr mühsam werden. Dies würde den meisten Programmiertechniken widersprechen, da Sie den maximalen Index finden und dann von dort aus zurückarbeiten müssten.
Ich kann mir vorstellen, dass es bei großen Dateien langsamer wird und die Programmierung auf jeden Fall lächerlich wäre.
Anstatt ein umgekehrtes Dateisystem zu finden, warum können Sie die Datei nicht einfach wie üblich schreiben und sie in umgekehrter Reihenfolge analysieren? Erarbeiten Sie ein grundlegendes Nachrichtenformatierungsschema, lesen Sie die Datei und analysieren Sie Nachrichten daraus. Zeigen Sie sie dann von der letzten bis zur ersten an. Wenn Sie nur die letzten Nachrichten benötigen, suchen Sie bis zum Ende der Datei und dann zurück.NNachrichten. Es würde ein ähnliches Ergebnis geben, aber mit weitaus weniger Arbeit und vergleichbarer oder besserer Leistung.
Antwort3
Sie müssen die Ideen trennen vonLagerungUndAbruf. Auch in den Blogs, die Sie erwähnen, sind die Einträge wahrscheinlichgelagertin chronologischer Reihenfolge, aberangezeigtin umgekehrter chronologischer Reihenfolge (wobei die Tatsache ignoriert wird, dass dies durch die Verwendung strukturierter Speicherung einfacher wird).
Man könnte sich vorstellen, ein vereinfachtes strukturiertes Speichersystem zu erstellen, das Einträge in der bekannten Vorwärtsreihenfolge mit „Datensätzen“ von freier Form und variabler Länge mit Byte-Offset-Zeigern speichert, die in einer Ressourcendatei in einem Format mit fester Länge gespeichert sind (64 Bit würden Dateien von über 18 Millionen Terabyte unterstützen). Die Suche nach dem letzten Datensatz oder dem nth
Datensatz last - n
in der Zeigerdatei und dann nach dem Byte, auf das er in der Hauptdatei zeigt, wäre trivial und schnell. Der Trick, den ein spezielles Dateisystem oder ein Treiber ermöglichen würde, wäre, dies atomar zu machen und die Ressourcendatei transparent zu machen.
Antwort4
Zwei Gedanken kommen mir in den Sinn:
Einige Versionskontrollsysteme speichern die erste Version der kontrollierten Datei vollständig und alle nachfolgenden Versionen als Änderungen, während andere die aktuelle Version der kontrollierten Datei vollständig und alle vorherigen Versionen als Änderungen speichern.
Wenn Sie Laufzeitereignisse in einer Datenbank statt in einer Flachdatei aufzeichnen, ist Ihnen möglicherweise nicht klar, ob die Datenbank die Ereignisse sequenziell, umgekehrt sequenziell oder willkürlich speichert.