Prinzipieller Ablauf bei Datenmanipulation

Hallo,

ich bin zurzeit dabei meine eigene Datenbank auf die Reihe zu stellen. Seit geraumer Zeit bin ich am planen.

Jetzt bin ich bei dem Thema Datenmanipulation angelangt.

Um es kurz vorweg zu nehmen, ich habe ein Objekt im Speicher liegen, welches meine Daten nicht-persistent speichert. Dem Objekt können Daten entnommen werden, es kann verändert werden und es können Daten hinzugefügt werden.

Um Persistenz dennoch zu wahren, speichere ich die Daten in ein spezielles Format in ein File ab.

Meine Frage diesbezüglich lautet, wie es Datenbanken am besten handlen, wenn zB. ein neuer Datensatz hinzugefügt wird.

Wird der Datensatz an das Objekt angehängt, und wenn Zeit für die DB besteht, in die Datei geschrieben? Oder wird gleich das komplette Objekt wieder als File nieder geschrieben, egal wie die Datenbank in Benutzung ist?

Eine Möglichkeit die sich mir bietet, wäre das Anhängen an das Objekt, mitweilen eines kurzen Vermerkes in einer Log-Datei. Ein Zwischending also.

Die Daten aus dem Objekt können ruhig verloren gehen (falls ein Systemcrash das Objekt zerstört), da alles geloggt wurde. Ab dem letzten Stand, der geloggt wurde, aber noch nicht in die Datei geschrieben wurde, wird ein Wiederaufrollen ins Leben gerufen, welches die Dateien fest in das File implementiert.

Dann wird das File wieder eingelesen und in mein Objekt in den Speicher geholt.

Ist der prinzipielle Ablauf so zumutbar?

Mfg Tom

Hi!

Ich kann Dir nur (in äußerst verkürzter Version) die Oracle-Systematik beschreiben:

Die Daten (also nur die benötigten) werden blockweise in den Speicher geladen, nebenbei schreibt der LogWriter in einem (bzw. wieviel man definiert hat, mind. jedoch 2) Log-File sämtlich Änderungen mit (am wenigsten bei einem Delete, da er hier nur die ROWID des zu löschenden Satzes benötigt - wobei diese Daten natürlich auch vorher erst in den Speicher nur kommen). Passiert nun ein Absturz o.ä., so können aus den Log-Files zumindest einige Daten wieder geholt werden.

Werden nun in diesen Daten Manipulationen vorgenommen, wird der Block als „Dirty“ markiert (dieser Block ist ein 1:1-Abbild von den gespeicherten Daten).

Passiert nun ein Commit (also die manipulierten Daten werden festgeschrieben), passiert dies nur mal im LogFile (Änderungsdaten werden physisch in das File geschrieben) - irgendwann dann (wobei das „irgendwann“ für spezielle Ereignisse steht) werden die „Dirty Blocks“ auf die Platte geschrieben

Änderungen am Objekt selber (Tabellenattibute, etc.) implizieren bereits ein Commit.

Die genaue Systematik ist natürlich _etwas_ komplexer, ich hoffe aber, es halbwegs verständlich (und auch richtig) geschrieben zu haben (ich bitte um Korrekturen - ist schon einige Zeit her, daß ich das Ganze _lernte_)

Grüße,
Tomh