Frage

Ich bin eine einfache Anwendung mit 24 Elementen in einem Hash-Schreiben über Programmausführungen persistent, so Berkeley DB (DBM) sollte gut für diese Aufgabe geeignet sein.

Und es ist nur so zum Spaß.

Aber ich frage mich, ob es mit (Ruby), dann, wenn der Benutzer drückt CTRL-C, dann wird die Ausführung gestoppt wird. In diesem Fall können die Daten nicht alle verkorkste?

Zum Beispiel, wenn der Wert in DB 63 ist, und I Inkrementieren um 1 (64 um)

63 =  111111 (in binary)  
64 = 1000000 (in binary)

so könnte die CTRL-C rechts auftreten, wenn das „Most Significant“ 1 geschrieben und doch die 0er hat nicht geschrieben worden? In diesem Fall wird der Wert in der DB 127 anstelle von 63 oder 64. Was passiert, wenn es nicht Ruby ist aber in C, und der Benutzer verwendet „Fenster schließen“ oder „kill“ den Prozess zu töten? Kommen Sie, daran zu denken, wahrscheinlich die Festplatte dieses Byte schreiben (oder 4-Byte) auf die Festplattenoberfläche auf einmal, so sollte dies nicht passieren.

Wenn Sie STRG + C wird dies nicht dazu führen, das geschehen kann, dann ein Stromausfall oder selbst tritt die Netzstecker könnten dazu führen dies zu geschehen? Wenn zum Beispiel der Wert zunächst im RAM zwischengespeichert, und während es auf die Festplatte geschrieben wird, treten ich den Netzstecker, und die Festplatte an Leistung verliert, bevor die 0er geschrieben werden. Ich weiß, dass man in einer Million mal, das wird nicht passieren, aber das ist nur eine Frage der Neugier.

Auf der anderen Seite, wenn mein Skript zu

  1. Verringern Sie den Münzwert
  2. Geben Sie dem Benutzer einen "Hamburger" in seinem Inventar

dann, wenn der Benutzer drückt CTRL-C, und es geschieht direkt zwischen (1) und (2) oben, dann wird der Benutzer weniger Münze hat, und erhält keine Hamburger.

All diese zu verhindern, wäre es das Transaktionsverfahren mit Sleepycat, SQLite oder MySQL, und keiner von ihnen passieren wird, verwenden sein?

War es hilfreich?

Lösung

Kein gutes Datenbanksystem (eine Kategorie, die Berkley DB enthält) könnte in der Art und Weise Sie vorschlagen unterbrochen werden, mit einem Wert teilweise aktualisiert. Wenn Sie Strg-C drücken, können Sie nicht unterbrechen die CPU Mitte Anweisung. Es gibt immer ein gewisses Maß an Granularität der Unterbrechung und gut geschriebene Datenbanken nutzen diese Tatsache, um gegen die Datenbank immer in einem inkonsistenten Zustand zu sein.

Das Potenzial für die Beschädigung von Daten und Verlust liegt vor, wenn der Strom ausfällt, aber die Details, ob Daten verloren gehen würde oder beschädigt haben mehr mit dem Dateisystem zu tun, auf das die Datenbankdateien gespeichert sind. Ein gutes Journaling-Dateisystem zum Beispiel schreibt, was es in einem „journal“, dann tut es tun wird, schreibt dann in der Zeitschrift, dass sie es getan haben. Also, wenn es Strom während eines Schreibvorganges verliert, zum Beispiel, sieht es an seiner Zeitschrift zu sehen, ob es etwas gibt es vor dem Zugriff auf das Dateisystem beenden muss. Dies ist eine grobe Vereinfachung, aber Sie können die Details erhalten, indem ext3 auf wikipedia Check-out, zum Beispiel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top