Ist es eine schlechte Praxis, Metadateninformationen in Dateinamen zu speichern? Bessere Lösungen?

13

Mir ist aufgefallen, wo ich arbeite, dass die Leute gerne Informationen in Dateinamen speichern und die Dateinamen analysieren.

Für mich scheint dies keine besonders gute Praxis zu sein. Ich sehe bereits die gelegentlichen Probleme mit Skripten, die für eine Datei globalisiert werden, und das falsche, weil eine andere Datei zuerst übereinstimmt. Wir diskutieren auch, wie Probleme mit Trennzeichen für die Felder umgangen werden können.

Gilt es als schlechte Praxis oder nicht?

Was sind andere akzeptierte Lösungen zum Abrufen von Dateien aus einem Dateisystem, das auf bestimmten Metadaten basiert?

wobbily_col
quelle
Es hängt sehr davon ab, was genau im Dateinamen gespeichert ist. Können Sie uns einige Beispiele nennen?
T. Sar - Reinstate Monica

Antworten:

14

Ja, ich denke, es ist eine schlechte Übung. Es gibt alle möglichen Probleme - zum Beispiel Längenbeschränkungen, Codierungsprobleme und Konflikte aufgrund doppelter Daten.

Besser ist die Verwendung einer "Masterdatei" (manchmal Manifest oder Index genannt), die Metadaten und Pfade zu den Dateien enthält. Oder ähnliches in einer Datenbank, einem Register oder so. Oder um die Metadaten in die eigentlichen Dateien einzufügen, auf der obersten Ebene einer Datenstruktur, die in der Datei enthalten ist, beispielsweise in JSON oder XML.

Dies entspricht in etwa dem Konzept, Informationen oder Namespacing-Schlüssel in Schlüsselwertspeichern abzulegen. Ich denke, das ist in Ordnung, solange Sie es nur für Namespaces und schnelle Suchvorgänge verwenden - die Schlüsselkomponenten sind nicht vorhanden, um analysierbare Informationen bereitzustellen. Wenn Sie diese Informationen benötigen, duplizieren Sie sie in den Wert (Datei im obigen Fall).

Magnus Wolffelt
quelle
3
Sie erhöhen die Darmpunkte. Es gibt jedoch Situationen, in denen es dennoch sinnvoll ist, die Informationen in den Dateinamen einzufügen. Denken Sie an E-Mail-Anhänge, die regelbasiert weitergeleitet oder verarbeitet werden müssen. Wenn viele parallele Prozesse die Master-Datei ändern müssen, kann dies zu einem Engpass werden.
Axel Kemper
Als Datenbankentwickler denke ich natürlich daran, eine Datenbank anstelle einer Manifestdatei zu verwenden (einer der Gründe, warum ich hier nach alternativen Methoden frage). Dies würde das Problem des gleichzeitigen Zugriffs lösen, ist jedoch eine komplexere Lösung.
wobbily_col
1
@wobbily_col Je nach verwendetem System werden möglicherweise erweiterte Dateiattribute unterstützt .
Hellion
@AxelKemper Es gibt nur so viele Informationen, die Sie in einen Namen einfügen können. Es gibt mehr Metadaten als Name und Autor.
Tulains Córdova
Ganz zu schweigen davon, dass Dateinamen von jemandem außerhalb Ihres Systems geändert werden können, wodurch alle erwarteten Formate verletzt werden. Selbst wenn Sie die entsprechenden Dateiberechtigungen durchgesetzt haben, ist dies eine spröde Lösung.
Berin Loritsch
5

Erstens sind Metadaten ein verschwommenes Konzept.

Es gibt jedoch bereits viele Fälle von Metadaten in Dateien:

  • Versionsnummern von Bibliotheken
  • Datum und Uhrzeit der Bilder oder mindestens Sequenzindex
  • Dateityp, der auslöst, mit welcher Anwendung die Datei geöffnet werden soll
  • Name Ihres Heimverzeichnisses, der Ihr Sitzungsbenutzername sein muss

Diese kurze Liste ist jedoch kein Argument für die Praxis.

Alternativen sind:

  • Behandeln Sie Metadaten auf FS-Ebene, z. B. das alte Apple-HFS
  • Fügen Sie Metadaten in die Datei selbst ein, z. B. Exif für Bilder oder ID3 für Sounds
  • Platzieren Sie Metadaten in einer anderen Datei oder in einer Datenbank, wie bei den meisten Medienmanagern.
mouviciel
quelle
5
Alles ist ein verschwommenes Konzept. Sogar "verschwommen", "Konzept" und "alles" sind verschwommene Konzepte.
Tulains Córdova
3

Es klingt, als bräuchten Sie eine Datenbank.

Es gibt viele Sicherheitsprobleme beim Einfügen von Benutzerdaten in Dateinamen. Angenommen, Sie haben für jeden Benutzer eine Datei ("Benutzername.txt"). Was passiert, wenn jemand den Benutzernamen "../../../../etc/passwd" registriert, hängt davon ab, wie Sie Benutzereingaben filtern.

Datenbank-Frameworks unterstützen Sie manchmal bei der Bereinigung von Benutzereingaben.

Eric Wimberley
quelle
Tatsächlich speichern viele Betriebssysteme Benutzernamen in Verzeichnisnamen, die als Basisverzeichnis bezeichnet werden .
Mouviciel
Das liegt daran, dass jemandes Software ganz unten im Stapel sein muss. Das bedeutet nicht, dass jeder auf dieser Ebene arbeiten muss. Ich werde nicht über die Vorzüge von Datenbanken streiten, da sie von Programmierern seit mehr als 50 Jahren verwendet werden.
Eric Wimberley
1
@mouviciel Mir ist kein Betriebssystem bekannt, das den Benutzernamen aus dem Basisverzeichnis des Benutzers analysiert. Windows- und Unix-ähnliche Systeme speichern beide den Namen des Verzeichnisses in einer Datenbank und laden ihn in die Umgebung, wenn sich der Benutzer anmeldet. Auf beiden Systemen kann sich der Name des Basisverzeichnisses vom Benutzernamen unterscheiden ( zB Benutzer umbenennen oder wenn Sie zwei Windows-Installationen auf derselben Systempartition haben).
Jules
2

Nein ... na ja ... nicht unbedingt.

Solange Sie eine strenge Konvention haben und gängige Analyse- und Validierungsmethoden (Skripte, Bibliotheken usw.) verfügbar sind, können Sie loslegen.

Nehmen Sie zum Beispiel Verpackungs- und Abhängigkeitsverwaltungssysteme (Maven, NuGet und dergleichen). Obwohl viele spezielle Dateien für Metadaten verwenden, um die erweiterten Informationen zu speichern, sind grundlegende Informationen oft Teil des Dateinamens. Unter Beachtung strenger Konventionen kann der Dateiname die wichtigsten Informationen zum Paket enthalten: Hersteller, Name, Version und Typ. Manchmal ist das alles, was Sie brauchen ... 4 oder 5 kurze Informationen.

Wenn die Metadaten einfach sind, ist eine Dateinamenskonvention absolut sinnvoll, bei der nichts eingerichtet werden muss. Es kann mit sehr einfachen Tools und Skripten, ohne Datenbank, ohne spezielle Infrastruktur, nur wenigen Skripten und einer Namenskonvention erweitert werden.

Wenn nichts da draußen genau das tut, was Sie brauchen und Ihre Bedürfnisse einfach sind, würde ich damit beginnen.

Ihre Anforderungen wachsen aus dieser Konvention heraus? erweitern Sie es mit einer richtigen Metadatendatei. Benötigen Sie später eine bessere Suche? Es gibt bereits gute Lösungen für die Suche nach Dateien, mit denen Sie dort ankommen, wo Sie sie benötigen.

Es ist nicht so, dass ich Datenbanken nicht mag, ganz im Gegenteil, sie sind sehr leistungsfähig und nützlich, aber sie erfordern einen gewissen Overhead, um in Gang zu kommen. Sie müssen installiert, gesichert und gewartet werden. Sie benötigen Mitarbeiter, die, wenn sie nicht vollständig dediziert sind, einen Teil ihrer Zeit für diese Infrastruktur aufwenden müssen. Sie sind auch komplexer und kryptischer für Laien, verlieren die Entwickler, die Sie eingerichtet haben, und Ihr System bleibt in der Zeit stecken, bis Sie einen Ersatz finden.

Unterschätzen Sie niemals die Macht von Low-Tech mit der richtigen Übersicht, es kann Ihnen einen langen Weg bringen.

Und wenn Sie aus Ihrer Low-Tech-Lösung herauswachsen, haben Sie alle Erfahrungen und Anforderungen gesammelt, um das perfekte System für Ihre Anforderungen zu implementieren.

Newtopian
quelle
Unterschätzen Sie niemals die Trägheitskraft. Eine Low-Tech-Lösung in etwas Robusteres zu verwandeln, erfordert viel mehr Aufwand, als es zunächst einmal nicht so zu machen.
Berin Loritsch
1
@BerinLoritsch Das gleiche Argument gilt für alle Lösungen, Low-Tech oder HiTech ... Man könnte argumentieren, dass HiTech, das mehr Systemabhängigkeit erfordert, diese Situation schlimmer macht, nicht einfacher. Trotzdem gibt es eine Schwelle, an der eine einfache Low-Tech-Lösung komplizierter wird als ein vollwertiges High-Tech-Gegenstück.
Newtopian
1
Ja, und ich binde jetzt ein paar solcher Beispiele für ein Projekt auf. Fazit ist, dass es mehrmals eine engere Schnittstelle als das Dateisystem geben muss. Leider haben die meisten von mir geerbten Low-Tech-Systeme keine entsprechenden Überlegungen oder Designs. Die Anzahl der Ausnahmen kann ich an einer Hand zählen.
Berin Loritsch
0

Lassen Sie uns zunächst vereinbaren, was eine Datei ist . Eine Datei ist ein Datenpaket mit einem Namen , das mit (sehr nahen) atomaren Operationen gesendet, empfangen, erstellt und gelöscht werden kann.

Viele Dateisysteme (Mac OS und neuere Linux-Dateisysteme) implementieren "Forks", die häufig zum Speichern von Ressourcen und Metadaten verwendet werden. Dieser Ansatz zum Speichern von Metadaten war insofern problematisch, als herkömmliche Netzwerkübertragungsmethoden, Sicherungs- und Wiederherstellungsmethoden und Dateikopiermethoden inkonsistent waren, insbesondere wenn das Quell- und das Zieldateisystem Dateiforks unterschiedlich verstanden.

Der Dateiname wird verwendet, um Metadaten zu speichern, da a) er immer vorhanden ist, b) Metadaten immer im Dateinamen vorhanden waren (zumindest bei Verwendung von Dateierweiterungen) und c) der Dateiname beim Verschieben nur sehr wenig übersetzt wird zwischen Systemen (Unterscheidung zwischen Groß- und Kleinschreibung, Einschränkung des Zeichensatzes, Einschränkung des Zeichensatzes).

Der Dateiname ist also sichtbar, portabel und verwaltbar. Dies ist keine schlechte Sache zum Speichern einiger Metadaten.

Die wahrscheinlich beste Lösung für die Adressierung allgemeiner Dateimetadaten ist die Verwendung eines Inhaltsrepositorys , in dem das Inhaltsrepository mit dem für die Dateien zu verwendenden Metadatenschema konfiguriert werden kann. In vielen Fällen ist dies übertrieben, aber meiner Meinung nach ist dies der richtige Weg für ein seriöses Metadaten-Management.

BobDalgleish
quelle
0

Ich gehe davon aus, dass Sie vielleicht irgendwo Code gesehen haben, der schlampige oder spröde Dinge mit Dateinamen macht, aber das bedeutet nicht, dass "Speichern von Metadaten in Dateinamen" im Allgemeinen schlecht ist.

Dateinamen sind Metadaten - sie sind Daten zu den Daten in der Datei, unabhängig von den Dateidaten selbst. In der Tat sind Dateinamen so alt, dass sie wahrscheinlich das kanonische Beispiel für Metadaten sind.

Wenn Sie bedenken, dass Dateierweiterungen nur das Ende des Dateinamens darstellen, wird das Konzept des Dateinamens als Metadaten noch unvermeidlicher.

user1172763
quelle