Frage zur Dateisystem-Strukturierung, um viele Dateien zu speichern
Hallo, ich habe eine Frage zur "optimalen" Speicherung von sehr vielen Dateien. Es geht um die Idee einer hierarchisch aufgebauten Bildergalerie von Fraktalbildern, wo am Ende durchaus 100 000 Bilder/Dateien zusammen kommen können (Open End). Betrachtet werden soll das mit dem Webbrowser, also entweter ganz normale HTML-Dateien (+ die Bilder selbst) oder mittels PHP-Script (dann Bilder + Steuerdateien). Das ganze soll (evtl.) auch über das Internet verfügbar gemacht werden (Hoster 1und1). Frage ist, wie die Dateien am besten speichern bzw. strukturieren? - alle einfach in ein Verzeichnis. Gibt es Performanceeinbußen, wenn so viele Dateien in einem Verzeichnis sind? Gibt es evtl. sogar ein Limit, wie viele Dateien/Verz. möglich sind? - das ganze mit Unterverzeichnissen abbilden? Dann wären nur vergleichsweise wenige Dateien/Verz, aber die Verzeichnistiefe kann durchaus auf 100 Unterverz. ansteigen. Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Di., 15. Sept. 2020 um 21:23 Uhr schrieb Jürgen Hochwald <jh@cfjh.de>:
Es geht um die Idee einer hierarchisch aufgebauten Bildergalerie von Fraktalbildern, wo am Ende durchaus 100 000 Bilder/Dateien zusammen kommen können (Open End). Betrachtet werden soll das mit dem Webbrowser, also entweter ganz normale HTML-Dateien (+ die Bilder selbst) oder mittels PHP-Script (dann Bilder + Steuerdateien).
Moin, Ich denke Du willst eigentlich eine Bilddatenbank. Dann kannst Du die nämlich bspw. sinnvoll verschlagworten.
- alle einfach in ein Verzeichnis. Gibt es Performanceeinbußen, wenn so viele Dateien in einem Verzeichnis sind? Gibt es evtl. sogar ein Limit, wie viele Dateien/Verz. möglich sind?
Nicht bei halbwegs modernen Dateisystemen (ext4,xfs,btrfs). Gruß Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 16.09.20 um 00:12 schrieb Martin Schröder: Danke dür die Info.
Am Di., 15. Sept. 2020 um 21:23 Uhr schrieb Jürgen Hochwald <jh@cfjh.de>:
Es geht um die Idee einer hierarchisch aufgebauten Bildergalerie von Fraktalbildern, wo am Ende durchaus 100 000 Bilder/Dateien zusammen kommen können (Open End). Betrachtet werden soll das mit dem Webbrowser, also entweter ganz normale HTML-Dateien (+ die Bilder selbst) oder mittels PHP-Script (dann Bilder + Steuerdateien).
Moin, Ich denke Du willst eigentlich eine Bilddatenbank. Dann kannst Du die nämlich bspw. sinnvoll verschlagworten.
Wenn das auf einer MySql/Maria-Db basiert, dann eher nicht, da mein Webhoster max. 100Mb/Db erlaubt. (ps: ich bin jetzt schon über 100Mb)
- alle einfach in ein Verzeichnis. Gibt es Performanceeinbußen, wenn so viele Dateien in einem Verzeichnis sind? Gibt es evtl. sogar ein Limit, wie viele Dateien/Verz. möglich sind?
Nicht bei halbwegs modernen Dateisystemen (ext4,xfs,btrfs). Lokal habe ich xfs. Was beim Webhoster verwendet wird, weiß ich nicht.
Gruß Martin
Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Ich würde nicht alle Dateien in einem Verzeichnis speichern. Neuanlegen von Dateien kann dann nämlich recht lange dauern, da ja auf doppelte Namen geprüft werden muss und eine bestehende Datei u.U. überschrieben wird. Ich hab früher mal Dateisysteme mit entwickelt (ist aber schon länger her) und da war das Suchen im Directory immer eine zeitaufwändige Sache. Wichtig ist, dass sich Dateinamen möglichst in den ersten paar Zeichen schon unterscheiden - durchsuchen nach Dateinamen wird überlicherweise mit Stringvergleichen gemacht. Bei einigen Projekten (etliche 1000 Dateien in einem Direktory) hat das schon zu Laufzeitproblemen geführt. Mit SSD Speichern aber nicht mehr so krass heutzutage, richtige Harddisks können da eher Probleme machen. Wenn eine DB keine Option ist, dann mach es doch so ähnlich wie es Git auch macht: - Leg Directories an, deren Namen die ersten beiden Zeichen der Dateinamen sind. Also von aa-zz (aa, ab, ac...az, ba, bb, bc...bz, ...), und AA-ZZ, dann könnte man noch eine Stufe drübergehen und nach 'a-z' und 'A-Z' strukturieren. Das natürlich unter der Prämisse, dass sich Dateinamen in den ersten beiden Zeichen unterscheiden und das einigermassen gleichverteilt ist :-) . Da sinkt die Anzahl der Datein pro Direcetory erheblich und suchen von Dateien geht deutlich schneller. Werner Am 15.09.20 um 21:23 schrieb Jürgen Hochwald:
Hallo,
ich habe eine Frage zur "optimalen" Speicherung von sehr vielen Dateien.
Es geht um die Idee einer hierarchisch aufgebauten Bildergalerie von Fraktalbildern, wo am Ende durchaus 100 000 Bilder/Dateien zusammen kommen können (Open End). Betrachtet werden soll das mit dem Webbrowser, also entweter ganz normale HTML-Dateien (+ die Bilder selbst) oder mittels PHP-Script (dann Bilder + Steuerdateien).
Das ganze soll (evtl.) auch über das Internet verfügbar gemacht werden (Hoster 1und1).
Frage ist, wie die Dateien am besten speichern bzw. strukturieren? - alle einfach in ein Verzeichnis. Gibt es Performanceeinbußen, wenn so viele Dateien in einem Verzeichnis sind? Gibt es evtl. sogar ein Limit, wie viele Dateien/Verz. möglich sind? - das ganze mit Unterverzeichnissen abbilden? Dann wären nur vergleichsweise wenige Dateien/Verz, aber die Verzeichnistiefe kann durchaus auf 100 Unterverz. ansteigen.
Jürgen
-- Werner Dittmann email: Werner.Dittmann@t-online.de cell: +49 173 44 37 659 PGP key: 82EF5E8B -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Fr., 18. Sept. 2020 um 16:23 Uhr schrieb Werner Dittmann <Werner.Dittmann@t-online.de>:
Ich würde nicht alle Dateien in einem Verzeichnis speichern. Neuanlegen von Dateien kann dann nämlich recht lange dauern, da ja auf doppelte Namen geprüft werden muss und eine bestehende Datei u.U. überschrieben wird.
Es würde mich bei einem modernen FS wundern, wenn das in der Größenordnung relevant ist. Du weißt, was b+-Bäume sind? Gruß Martin PS: TOFU :-( -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
On Fri, 18 Sep 2020 16:28, Martin Schröder wrote:
Am Fr., 18. Sept. 2020 um 16:23 Uhr schrieb Werner Dittmann:
Ich würde nicht alle Dateien in einem Verzeichnis speichern. Neuanlegen von Dateien kann dann nämlich recht lange dauern, da ja auf doppelte Namen geprüft werden muss und eine bestehende Datei u.U. überschrieben wird.
Es würde mich bei einem modernen FS wundern, wenn das in der Größenordnung relevant ist. Du weißt, was b+-Bäume sind?
IMHO ist heute selten das Dateisystem der limiterende Faktor als vielmehr das nutzende Programm. Beispiel: Programm will Dateien auflisten. 1. Verzeichniss anfragen (gibts das wirklich) 2. Verzeichniss einlesen. Hier klemmts häufig. 2a) Kleines Verzeichniss, bis 1000 Dateien, selten ein Problem, es sei denn der Programmierer macht falsche Vorgaben z.B. 8.3 ASCII Dateienamen wenn die Realität 256 (oder mehr) Zeichen Unicode-8 ist. 2b) Mittlere und Große Verzeichnisse ab 1000 Dateien, deutlich bei 10'000 und mehr. Hier machen selbst kleinere Programmier-Fehler dann 'plötzlich' erheblichen Unterschied im Speicherverbrauch und der Verarbeitungs-Geschwindigkeit. Besonders PHP hat im Kern immer noch Macken die das arbeiten mit Verzeichnissen oberhalb von ca 2000 Einträgen stark verlangsamen, und ab ca 8000 Einträgen rapide Speicher fressen, ohne im Code (von PHP selbst) offensichtlich zu sein. "Debugging" macht dann riesigen Spass (NICHT). Persönlich würd ich mir eine Gruppierung suchen die eine Verzeichnissgröße von meistens unter 1200 Einträge ergibt. Überblick und Handhabbarkeit sind dann nette Nebeneffekte. - Yamaban. -- 30 years of debugging, and I still have not found the magic switch to switch off stupid in coders. GRRR.
Hallo, ich habe das jetzt nochmal überdacht. Es wird wohl darauf hinauslaufen, mit Unterverzeichnissen zu arbeiten, die sich dann aus den Dateinamen ergeben. Probieren muß ich noch, wie viele Zeichen dann ein Unterverzeichnis ergeben, werden aber eher mehr Zeichen ( denke 5-8). Aktuell wird für jede Hirachieebene ein Buchstabe zu dem Dateinamen hinzugefügt, mit "a" beginnend. Jede weitere Ebene dann ein Weiterer Buchstabe, für einen neuen Zweig derselben Ebene der nächste Buchstabe im Alphabet. ein Typischer Dateiname könnte dann "abdaaaceaaaaaaaaaaa.jpg" lauten. Dieser würde dann in die Struktur "./abdaa/aceaa/aaaaa/aaaa.jpg" überführt werden (wenn ich 5 Zeichen annehme) Nun habe ich mal einen Test gemacht, wie weit man das mit den Verzeichnissen treiben kann (mein aktuell "Längster" hat 88 Zeichen). Auf meinem (noch) aktuellen Entwicklungsrechner (i7 2600 ) ist das Dateisystem XFS. Hier habe ich zunächst einfach ein Verzeichnis "a" angelegt und in das Verzeichnis gewechselt, und das immer wiederholt. Bei 307 Unterverzeichnissen war dann Schluß. Es kann dann zwar keine Fehlermeldung aber es wurden keine weiteren Verzeichnisse angelegt. Dann habe ich genau dasselbe nochmal mit längeren Verzeichnisnamen getestet: 10*a. Hier konnte ich sogar 309 Unterverz. anlegen, wobei das letzte Untervez. dann nur noch 7 Zeichen hatte. ALLERDINGS ging hier die Performance deutlich in die Knie. Einfaches [Enter] in dem Verzeichnis dauterte über 1 sek., bis der Eingabeprompt wiederkommt (war bei den Verz., "a" nicht der Fall). Dann dasselbe auf dem neuen Rechner: R9 3900, Btrfs-Dateisystem: Hier scheinen die Limitierungen deutlich größer zu sein, nach 1000 Unterverz. "a" habe ich aufgegeben. Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (4)
-
Jürgen Hochwald
-
Martin Schröder
-
Werner Dittmann
-
Yamaban