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?
programming-practices
wobbily_col
quelle
quelle
Antworten:
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).
quelle
Erstens sind Metadaten ein verschwommenes Konzept.
Es gibt jedoch bereits viele Fälle von Metadaten in Dateien:
Diese kurze Liste ist jedoch kein Argument für die Praxis.
Alternativen sind:
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle