[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Datenspeicherung in Datenbanken (war: DigiKam und die alten Bilder)



On Thursday 08 April 2010, David Raab wrote:
> On 04/08/2010 12:31 PM, Michael Schuerig wrote:
> > Hier liegt allerdings eine Schwierigkeit, wenn man Daten in
> > Datenbanken speichert. Wenn alle Daten in strukturierten
> > Textdateien liegen, INI oder XML, dann ist die Wahrscheinlichkeit
> > ziemlich groß, dass man beim Backup eine konsistente Sicht
> > zumindest der einzelnen Dateien bekommt.
> > 
> > Bei Datenbanken sieht das anders aus. Wenn der Backup-Prozess
> > gerade dann eine (der) Datenbankdatei(n) kopiert während das DBMS
> > in die Datenbank schreibt, ist die Konsistenz der gesicherten
> > Datei fragwürdig.
> 
> Das gleiche passiert bei Dateien. Wenn ein backup stattfinden während
> ein Prozess gerade die XML Datei schreibt, passiert das gleiche.
> 
> Oder um es anders zu sagen, es passiert generell wenn Inhalte
> geschrieben werden, ob der Inhalt nun eine Datenbank ist oder XML
> oder etwas anderes spielt da auch wieder keine rolle.
> 
> Ein Dateisystem generell kümmert sich nie um die Inhalte einer Datei,
> volkommen egal ob es nun eine SQLite Datenbank ist oder eine
> textdatei. Ein Programm muss diesen fall das es geschrieben wird
> während es gebackupt wird also sowieso lösen, unabhängig davon was
> nun der Inhalt der Datei ist.
> 
> Das Problem was du beschreibst trifft also genauso oft auf wie bei
> "normalen" dateien.
> 
> > Das Backup braucht für den Kopiervorgang Zeit und bekommt daher
> > eben nicht die Sicht zu einem Augenblick auf die Datenbank.
> 
> Das gleiche gilt für "normale" dateien. Auch Datenbanken sind
> letztendlich normale Dateien im Dateisystem.
> 
> > Um ein sicheres Backup zu bekommen, muss man -- eigentlich --
> > entweder vorher den Datenbankprozess beenden oder transaktional
> > einen Dump ausführen und diesen sichern.
> 
> Das gleiche hast du auch bei nicht Datenbank dateien. Du musst
> entweder den prozess beenden der die dateien anpasst oder locken
> etc.
> 
> > Ein solches Vorgehen ist, denke ich, üblich bei Benutzern, die
> > Datenbankserver nicht nur "zufällig" auf ihren Rechnern haben.
> 
> Der Benutzer sollte sich eigentlich überhaupt nicht darum kümmern,
> nun teilweise. Wenn ich natürlich ein Backup laufen habe, während
> eine Applikation läuft die nunmal dateien verändert dann gibt es
> hier natürlich schwierigkeiten.
> 
> 1) Entweder muss das Backup programm diese Probleme lösen.
> 2) Oder man muss die Applikation vor dem backup schließen, vorallem
> wenn man es nur händisch macht mittels copy&paste etc.
> 
> Und diese Regel gilt egal welchen Inhalt die Dateien nun haben.
> 
> Wie gesagt wenn du speicherformate wie XML oder sonstige Formate
> nutzt ist es deswegen nicht automatisch sicher und einfach, und es
> können hier die gleiche Probleme auftreten wie bei Datenbanken.
> 
> Den leztztendlich sind für das OS oder Backup alles nur Dateien, und
> kennt den Inhalt der Dateien nicht, und irgendeine Applikation kann
> diese während des lesens verändern.

Das stimmt so nicht. Programme schreiben Dateien idealerweise atomar. 
Eine alte Datei wird nicht einfach mit den neuen Daten überschrieben, 
sondern die neuen Daten werden in eine neue Datei geschrieben und diese 
anschließend auf den alten Namen umbenannt. Ein Backup-Programm sieht 
dann immer eine konsistente Version der Daten.

Datenbanken schreiben ihre Daten nicht in dieser Weise, sie führen 
Ändern innerhalb einer oder mehreren Dateien durch. Dabei garantieren 
sie zwar durchaus eine konsistente Sicht auf die Daten und können sie 
auch nach einem Absturz wiederherstellen. Das gilt aber nur für die 
Sicht, die das DBMS selbst auf die Daten hat. Für ein Backup-Programm, 
das am DBMS vorbei auf dessen Dateien zugreift, gelten diese Garantien 
nicht.

> > Bei
> > Benutzern, die gar nicht wissen, welche Datenbanken sie überhaupt
> > haben, sieht das wohl ganz anders aus. Nehmen wir den Fall KDE 4:
> > 
> > Akonadi und Nepomuk, die das Backend für die Speicherung von
> > PIM-Daten und für den "semantischen" Desktop bilden, starten (für
> > jeden angemeldeten Benutzer!) eine eigene MySQL-Instanz und eine
> > Virtuoso- Instanz.
> > 
> > Digikam speichert seine Daten in einer SQLite-Datenbank.
> > 
> > Amarok verwendet ein eingebettetes (ohne eigenen Prozess) MySQL.
> 
> Und worauf willst du nun genau drauf hinaus das du mir sagst wie die
> unterschiedlichen Anwendungen ihre Daten speichern?

Wir führen eine öffentliche Diskussion, ich richte mich nicht nur an 
dich persönlich.

Ich will darauf hinaus, dass die Datensicherung möglicherweise nicht 
ganz so einfach ist, oder nicht das leistet, was vermutlich die meisten 
Benutzer erwarten. Es ist möglich, dass man zwar ein Backup einer dieser 
Datenbanken hat, dieses aber nicht brauchbar ist.

Michael

-- 
Michael Schuerig
mailto:michael@schuerig.de
http://www.schuerig.de/michael/


Reply to: