[linux-l] mbox/Maildir/tar

Rocco Rutte pdmef at gmx.net
Di Nov 27 12:49:15 CET 2007


Hi,

* Oliver Bandel wrote:
>Zitat von Rocco Rutte <pdmef at gmx.net>:
>> * Oliver Bandel wrote:
>> >Zitat von Steffen Dettmer <steffen at dett.de>:

>> >> P.S.: http://www.qmail.org/man/man5/maildir.html

>> >Ist ja eigentlich trivial; aber eine gute Idee, dieser Aufbau.

>> Ich bin da inzwischen fast schon anderer Meinung. Maildir löst das
>> Locking-Problem (und damit auch NFS-Sorgen) sozusagen "final" sowie
>> das
>> noatime-Problem bei mbox für das Linux-Lager.

>noatime-Problem?

>IMHO ist noatime ein Unding.

>Ist fast wie nofilename ;-)
>oder wie noPID ;-)

>Wie wirkt sich noatime bei Benutzung
>von mailfoldern im mbox-Format aus?
>Das ist mir nicht klar. Verlassen sich die Reader
>auf die atime für ihre Operationen?
>Fände ich nur sinnvoll; man verlässt sich ja auch auf andere
>Informationen des Filesystems.

>Wo ist da das Problem?

Man kann definieren, dass eine mbox-Mailbox ungelesene Nachrichten hat, 
wenn mtime > atime. Aus Performance-Gründen (oder warum eigentlich 
sonst?) wird ext2/ext3 oder so oft mit noatime gemountet. Verstanden 
habe ich das nie so richtig.

>> Andererseits hängt die Benutzbarkeit teilweise von Low-Level-Sachen wie
>> Dateisystemparametern ab, was nicht Sinn der Sache sein kann (also als
>> Admin am FS zu fummeln nur weil User Maildir haben könnten).

>Wo ist in dem Falle das Problem?
>Kannst Du das mal erläutern?

S.u.

>> Um es
>> schnell zu implementieren, muss man leider genau wissen in welcher
>> Reihenfolge die Blöcke der Files auf der Platte liegen.

>Ach, Du meinst wegen Platten-Kopf-Bewegungen?
>Meinst Du nicht, daß das eher zweitrangig ist?

Ja. Nein. :-(

Bei ext3 mit dir_index macht z.B. Inode-Sortierung das Parsen bei mutt 
"mal eben" um Faktor 12-13 schneller, wenn man die Mails nicht im header 
cache hat. D.h. der Seek-Overhead ist wirklich extrem.

Gut, das macht sich wohl erst bei Größenordnungen von 10k und mehr 
(hier: >300k) bemerkbar. Aber 10 Minuten parsen statt >2h ist schon 
krass, vor allem weil er simples Mergsesort das Problem löst. Mutt macht 
da nicht viel, aber 300k Files aus einem komplett lesen in 2h ist 
deutlich zu viel.

Directory hashing ist ja ganz sinnvoll, um Files schneller zu finden. 
Aber mit B+-Bäumen (oder war das B*?) hat man im Prinzip eine einfach 
verlinkte Liste mit einem Baum zum schnellen Zugriff "oben drüber". Das 
müsste doch reichen. Statt dessen muss man jetzt alle Anwendungen 
anpassen, die größere Mengen Files aus einem readdir()-Lauf verarbeiten 
wollen. :(

Eine Sortierung setzt aber widerum voraus, dass die zu Inodes gehörigen 
Blöcke auch strikt linear auf der Platte liegen. Ob das immer bei allen 
FS der Fall ist, weiss ich nicht.

>Ich finde auch das mbox-Format nach wie vor interessant.
>Was man da für einen schnellen Zugriff benutzen kann,
>ist ja eine Indizierung, um zu wissen, an welcher
>Poition in der Datei eine neue Mail anfängt; man braucht dann nicht
>dauernd die Mails einlesen. (Darüber gab es hier ja schon mal
>Diskussionen.)

Das bringt aber nichts. Dann musst du ein neues Format erfinden, denn 
wenn ich Mail XY an Stelle 3 ändere und sie dadurch kürzer/länger wird, 
müssen alle Indizes angepasst werden. Oder man merkt sich nur die Länge 
der Nachrichten und kann inkrementell dann Offsets relativ schnell 
berechnen (also schneller als Parsen), weil man den Index dicht genug 
packen kann.

Aber das Hauptproblem an dem Ansatz ist: jetzt hast du nicht 1x sondern 
2x Locking.

Aber so richtig bin ich nicht überzeugt, dass die Indizierung was 
bringt. Höchstens wenn du außerhalb es Mailclient was suchst. Dann kann 
man aber auch gleich grep nehmen; der Mailclient muss es aus anderen 
Gründen parsen, wo ihm der Index nichts nützt.

>tar hat übrigens ja das selbe Problem: alle Dateien in einer
[...]
>Naja, aber wir waren ja bei mbox-Format/Maildir-"Format".

Ich finde:

http://synflood.at/blog/index.php?/archives/399-Warum-.tar.gz,bz2-zum-Archivieren-hirnverbrannt-ist.html

hat den netten Ansatz, pro File zu packen und dann in einem Container 
zusammenzuwerfen. Hat auch den Vorteil, dass man join/split trivial ist 
(ideal für Archivierung). Sowas könnte man wirklich mal implementieren.

MfG, Rocco



Mehr Informationen über die Mailingliste linux-l