Was ist die beste Möglichkeit, Tausende von Bildern in einer Windows-Ordnerstruktur zu speichern?

Was ist die beste Möglichkeit, Tausende von Bildern in einer Windows-Ordnerstruktur zu speichern?

Wir haben Hunderttausende von JPG-Bildern in einer Windows-Ordnerstruktur wie dieser, aber es ist wirklich schwierig, schnell mit ihnen zu interagieren und zu arbeiten (Auflisten braucht Zeit, Kopieren braucht Zeit usw.). Hier ist die Struktur:

images/
  1/
    10001/
      10001-a.jpg
      10001-b.jpg
      ...
      10001-j.jpg (10 images in each XXXXX folder)
    10002/
    10003/
    ...
    19999/
  2/
    20001/
    20002/
    20003/
    ...
    29999/
  3/
  4/
  5/
  6/
  7/
  8/
  9/

Nun ist das Durchsuchen dieser Bilder etwas langsam, da sich in jedem X-Ordner ungefähr 10.000 Ordner befinden und das Auflisten dieser einfach Zeit kostet.

Gibt es eine bessere Möglichkeit, die Bilder mit weniger Unterordnern/Elementen zu organisieren? Hätte eine entsprechende Änderung der Struktur irgendeinen Effekt?

images/
  1/
    0/
      0/
        0/
          0/
          1/
          2/
          3/
          4/
          5/
          6/
          7/
          8/
          9/
          10000/ (image folder, same as path)
            10000-a.jpg
            10000-b.jpg
            ...
            10000-j.jpg (10 images in each image folder)
        1/
        2/
        3/
        4/
        5/
        6/
        7/
        8/
        9/
      1/
      2/
      3/
      4/
      5/
      6/
      7/
      8/
      9/
    1/
    2/
    3/
    4/
    5/
    6/
    7/
    8/
    9/
  2/
  3/
  4/
  5/
  6/
  7/
  8/
  9/

Somit entspricht die Suche nach Bild 48617-c.jpg dem Pfad 4/8/6/1/7/48617/48617-c.jpg.

Der Grund für einen separaten Ordner mit der vollständigen Pfadnummer 48617 besteht darin, das Kopieren eines vollständigen Stapels mit 10 Bildern zu vereinfachen (durch Kopieren des gesamten Ordners).

Nun ... wird kein Ordner mehr als 11 unmittelbare Unterordner haben, aber es wird viele zusätzliche einstellige Ordner zur Trennung geben. Würde diese Konfiguration das Browsen und die Interaktion beschleunigen, wenn mehrere Benutzer Bilder hinzufügen/kopieren/löschen/usw.?

Antwort1

Windows ist etwas Besonderes, wenn es um das Ordnerlayout mit Unmengen von Dateien geht. Besonders Bilder, da der Windows Explorer sie speziell behandelt. Dennoch gibt es ein paar Richtlinien, die man befolgen sollte, damit die Dinge nicht zu kompliziert werden.zuAus der Hand:

  • Wenn Sie aus irgendeinem Grund die Verzeichnisstruktur vom Windows Explorer aus durchsuchen möchten, beschränken Sie sie auf 10.000 Einträge pro Verzeichnis (Dateien und Unterverzeichnisse).
  • Wenn Sie ausschließlich über CLI-Dienstprogramme oder Code damit interagieren, ist das 10K-Limit weitaus flexibler.
  • Erstellen Sie nicht ZU viele Unterverzeichnisse. Jedes erstellte Verzeichnis stellt einen weiteren diskreten Vorgang dar, der beim Kopieren ausgeführt werden muss.
    • Wenn jede Datei N Verzeichnisse erstellt, ist die Anzahl derDateisystemobjekteDie von dieser Datei erstellte Datei beträgt 1+N, was Ihre Kopierzeiten linear skaliert.
    • Ein kurzer, exponentieller Baum (d. h. drei Verzeichnisebenen mit jeweils 256 Unterverzeichnissen) kann erstaunlich weit skaliert werden, bevor Sie das Limit von 10.000 pro Verzeichnis erreichen.
  • Wenn Sie mit Code darauf zugreifen, öffnen Sie es direkt, anstatt Verzeichnislisten vor dem Öffnen zu analysieren. Ein fehlgeschlagenes fopen(), gefolgt von einem Verzeichnisscan, ist in vielen Fällen schneller als ein Verzeichnisscan, gefolgt von einem garantierten fopen().

Vorbehalte:

  • Die Anzahl der Dateien ist unveränderlich, die Anzahl der Verzeichnisse können Sie jedoch selbst bestimmen. Die Summe dieser beiden Werte bestimmt, wie schnell Kopiervorgänge dauern.
  • Versuchen Sie, wenn möglich, nicht mit dem Windows Explorer zu surfen, es sei denn, es ist unbedingt nötig. Er kommt mit großen Verzeichnissen nicht gut zurecht, und Sie können nicht viel dagegen tun.

Antwort2

Es gibt viele gute Informationen über die Mathematik in meiner Antwort vonWelchen Einfluss hat die Verzeichniskomplexität auf I-Nodes?

Allerdings verarbeiten verschiedene Dateisysteme große Mengen von Dateien in Verzeichnissen auf unterschiedliche Weise. Manche kommen mit 10.000 Einträgen klar, andere knicken ein. Als Faustregel gilt, dass 1.000 wahrscheinlich ein gutes Ziellimit ist, wenn Sie die Kontrolle über das Design haben. Einträge in einem Verzeichnis werden normalerweise als eine Art Liste gespeichert und es ist Sache der lesenden Anwendung, ihre Reihenfolge zu sortieren. lsIn der Unix-Welt werden beispielsweise Dinge in Verzeichnisreihenfolge in den Speicher gelesen und dann in alphabetischer Reihenfolge ausgegeben.

Sehen Sie sich die Berechnungen aus der anderen Frage an. Bedenken Sie auch, was sysadmin1338 über das andere Verhalten des Explorers gesagt hat. Der Explorer erstellt Miniaturansichten von allem, was er als Bild erkennt, und liest diese Miniaturansichten dann, um sie anzuzeigen. Das ist eine Menge Festplatten-E/A, um ein Verzeichnis anzuzeigen, das voll mit Dateien ist.

Antwort3

Abhängig davon, ob Sie über die Ressourcen verfügen, ein solches System zu entwickeln, klingt dies nach einem guten Kandidaten für eine SQL Server-Datenbank mitDATENFLUSSSpeicher für die Dateien. Auf diese Weise überlassen Sie die Organisation der Verzeichnisse SQL Server und müssen sich nur darum kümmern, wie Sie die Daten selbst verwalten. Sie könnten wahrscheinlich SQL Express verwenden, da FILESTREAM-Daten bei der Berechnung der Datenbankgröße nicht berücksichtigt werden.

verwandte Informationen