Effiziente Ordnerstruktur im Dateisystem ?

FreeBSD, Gentoo, openSUSE, CentOS, Ubuntu, Debian
highlander74
Posts: 42
Joined: 2004-01-02 15:34

Effiziente Ordnerstruktur im Dateisystem ?

Post by highlander74 » 2004-10-25 10:15

Hallo !
ich hoffe mal ich bin in diesem Unterforum richtig.

Problemstellung:
Dokumentenmanagement, das zum Kunden Files ablegt. Links auf das Filesystem werden in einer DB gespeichert.

Frage dazu:
Wie gestalte ich mein Dateisystem einigermassen effizient? Ich möchte gerne der Ã?bersicht halber die Dateien für jeden Kunden in einen eigenen Folder packen.

Gibt es da Restriktionen .. z.B. max. Anzahl Subfolders (sind mehrere tausend Adressen wobei nicht jede Dokumente hat). Soll ich die Subfolders irgendwie staffeln ?

Wie wirkt sich das auf die Plattenperformance aus ?

Es wäre denkbar auch später die Directorystruktur mit einer lokal installierten "Suchmaschine" indizieren zu lassen ...

Was würdet Ihr mir empfehlen ? Basis ist Ext2 oder ReiserFS.

Danke schon mal im Voraus !

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: Effiziente Ordnerstruktur im Dateisystem ?

Post by captaincrunch » 2004-10-25 11:18

Die größte Restriktion bei diesem Vorhaben dürfte wohl die maximale Anzahl der inodes sein, sofern sie nicht bereits im Vorfeld nicht entsprechend angepasst wurden. Auch die maximale Anzahl gleichzeitig offener Files, die der Kernel bereit ist zu handlen könnte zum Problem werden; dieser Wert kann aber sehr einfach per /proc oder sysctl angepasst werden.

Was die Performance angeht, würde ich zusehen, dass ich nicht gleich zigtausend kleine Files in ein Directory packe, gerade in Falle von ext2/3 ist das meistens ein ziemliche Performancebremse. Reiser soll da erhebliche Vorteile haben, als gebranntes Kind lasse ich für meinen Teil allerdings lieber die Finger davon weg.
Postfix und Exim bieten z.B. die Möglichkeit, die Spool-Dirs zu splitten, was der Performance recht zuträglich ist. Vielleicht schaust du dir dieses Prinzip ja mal an, das ganze dürfte auch dir schon weiterhelfen.

Als alternaive Idee: warum bildest du nicht auch die Dokumente in der DB ab?
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

User avatar
Joe User
Project Manager
Project Manager
Posts: 11583
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Effiziente Ordnerstruktur im Dateisystem ?

Post by Joe User » 2004-10-25 12:50

Als Filesystem würde ich Reiser4 einsetzen, da Reiser4 insbesondere bei sehr vielen Dateien pro Verzeichniss gegenüber allen anderen Filesystemen, abgesehen von NTFS3.1, am Performantesten ist.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

cschwede
Posts: 28
Joined: 2003-07-14 12:51
Location: Hamburg

Re: Effiziente Ordnerstruktur im Dateisystem ?

Post by cschwede » 2004-10-25 18:00

CaptainCrunch wrote:Als alternaive Idee: warum bildest du nicht auch die Dokumente in der DB ab?
Ich habe sowas mal mit zwei Kollegen versucht und mußte feststellen, das die Datenbanken dann sehr schnell in die Knie gehen können. Beispielsweise habe ich ein System mit etwa 50 GB an Dateien, da machen die meisten Datenbanken schnell schlapp. Mal ganz abgesehen davon, das bei solchen Datenmengen eigentlich nur noch "große" DBs wie DB4 oder Oracle in Betracht kommen, die wohl in den seltensten Fällen auf einem Rootie laufen. Auch von der Performance her ist das Dateisystem eindeutig schneller.-
Ich habe meine Ordnerstruktur so gewählt, das jedes Dokument fortlaufend indiziert wird und anhand der letzten beiden Ziffern des Dokumentsnamens (bspw. "Hallo0017390.txt") die Ordner ausgwählt werden (in diesem Fall dann /Mountpoint/9/0). Bei 10.000 Dateien haßt Du dann etwa 100 Dateien pro Verzeichnis, das sollte kein Problem darstellen.

dea
RSAC
Posts: 619
Joined: 2002-08-13 12:05

Re: Effiziente Ordnerstruktur im Dateisystem ?

Post by dea » 2004-10-26 13:10

Ich würd' ja für jeden Kunden zunächst eigene Filesysteme/Partitionen erstellen und die dann "nett" im Wurzelverzeichnis des DMS einhängen. Vereinfacht einiges (Backup, Hinzufügen/Entfernen, usw.), vor allem wenn Du einen LVM (lvm/2, evms/2) verwendest.

Darunter würde ich allerdings keine Klartextnamen mehr für die Verzeichnisse verwenden, das ist in der Praxis meist zum Scheitern verdammt. Besser ist es, sich an die Struktur der Tabellen bzw. Felder in der DB zu orientieren. So fällt es auch beim debuggen leichter, Ordner ohne "umrechnen" einzelnen Einträgen zuzuordnen.

Wie die Struktur dann en detail aussieht würde ich allerdings dem Kunden überlassen. Solange er seine Ordner nur logisch in der DB anlegt (und daraus dann die entsprechenden Verzeichnisse generiert werden), soll er halt sein ganz "persönliches" Chaos einrichten und benutzen.

Als Dateisystem würde ich XFS nehmen, alternativ auch JFS. Bei beiden handelt es sich um bewährte, ausgereifte und uneingeschränkt für den produktiven Einsatz nutzbare Formate. Reiser4 und Konsorten fehlt in meinen Augen noch die nötige Reife, auch wenn sie den Anforderungen genügen dürften. Performance bei Dateisystemen halte ich für relativ unwichtig, die gängigen Messwerte sind eh' alle unter Laborbedingungen entstanden, die Abweichungen in der Praxis deshalb wahrscheinlich deutlich und schwer vorhersagbar. Außerdem dürfte -- ganz besonders, wenn Du das DMS auf einem rootie betreibst -- die Netzwerkperformance eh' der gravierendere Flaschenhals sein. Anderenfalls nimmst Du halt noch 'n RAID dazu, damit hast Du wesentlich effektivere Möglichkeiten, Performance und Ausfallsicherheit zu verbessern.