Archive for August, 2006

03
Aug

Datensicherung eines sehr großen Verzeichnisses auf mehrere Datenträger

Wie sichert man ein sehr großes Verzeichnis auf mehrere DVDs? Mit der guten alten Shell. :)

Unter Windows besorgt man sich zuerst die GNU Tools. Das wbin Verzeichnis sollte man zu der PATH Umgebungsvariable hinzufügen. Unter Linux stehen die notwendigen Tools bereits zur Verfügung.

Folgender Befehl sichert das Verzeichnis C:\foo\bar als gzip komprimiert (tarball), aufgeteilt in 100 MB große Dateien:

tar c C:\foo\bar | gzip | split -b100m - backup.tgz.split.

Die Dateien haben eine Bezeichnung nach dem Schema backup.tgz.split.aa, backup.tgz.split.ab, …

Die Wiederherstellung ist genauso einfach:

cat backup.tgz.split.* | gzip -d | tar -x

Das Packen und Entpacken geht erstaunlich schnell und stabil (getestet mit 30 GB). Die Programme sind kostenlos. Was will man mehr?

03
Aug

PHP - Schnell oder wartbar?

Den richtigen Weg zwischen “Schnell” und “Wartbar” zu finden ist nicht einfach. Wie wichtig Code-Optimierung ist, sieht man an vielen Beispielen. Während „High End“-Root Server oft schon mit einem einzelnem Forum ausgelastet sind, pflegen wir wesentlich schwächere/ältere Systeme, die eine deutlich höhere Anzahl Anfragen verarbeiten.

Hierzu wieder zwei interessante Links:

Gerade die Datenbank ist ein beliebter Engpass. Deshalb sollte man, wann immer möglich, af den unnötigen Overhead verzichten.

  • Viele Anforderungen lassen sich mit einfachen Dateien lösen. Der direkte Zugriff ist schneller, als die Abfrage einer Datenbank. (Die muss schliesslich auch Dateien öffnen …)
  • Eine RAM Disk beschleunigt den Zugriff auf Dateien enorm.
  • Auch Datenbanken lassen sich komplett in den RAM legen. In mySQL nennt sich das MEMORY Storage Engine.
  • mySQL Tabellen lassen sich Partitionieren. Das beschleunigt den Zugriff auf die Daten mitunter enorm. (Date Tutorial, Range Tutorial)

Gerade die Leistung eines Datenbankservers lässt erheblich nach, sobald die abzufragende Tabelle nicht mehr in den Arbeitsspeicher passt. Da zeigt sich dann auch sehr schnell der Unterschied zwischen einem Join und einem WHERE foo.id=bar.id.