Die meisten In-Memory-Datenbanksysteme bieten Persistenz, zumindest als Option. Dies wird durch Transaktionsprotokollierung implementiert. Beim normalen Herunterfahren wird ein speicherinternes Datenbankabbild gespeichert. Beim nächsten erneuten Öffnen wird das vorherige gespeicherte Bild geladen und danach wird jede an die speicherinterne Datenbank übergebene Transaktion ebenfalls an eine Transaktionsprotokolldatei angehängt. Wenn das System abnormal beendet wird, kann die Datenbank wiederhergestellt werden, indem das ursprüngliche Datenbankimage erneut geladen und die Transaktionen aus der Transaktionsprotokolldatei wiedergegeben werden. Die Datenbank befindet sich immer noch im Arbeitsspeicher und daher muss genügend Systemspeicher vorhanden sein, um die gesamte Datenbank zu speichern. Dadurch unterscheidet sie sich von einer persistenten Datenbank, für die nur ein Teil im Speicher zwischengespeichert wird. Daher wird die Unvorhersehbarkeit eines Cache-Treffers oder Cache-Fehltreffers beseitigt.
Das Anhängen der Transaktion an die Protokolldatei kann normalerweise synchron oder asynchron erfolgen, was sehr unterschiedliche Leistungsmerkmale haben wird. Die asynchrone Transaktionsprotokollierung riskiert immer noch die Möglichkeit, festgeschriebene Transaktionen zu verlieren, wenn sie nicht aus den Dateisystempuffern gelöscht wurden und das System unerwartet heruntergefahren wird (d. H. Eine Kernel-Panic).
In der Arbeitsspeicher-Datenbank-Transaktionsprotokollierung wird garantiert immer nur eine Datei-E/A zum Anhängen der Transaktion an die Protokolldatei benötigt. Es spielt keine Rolle, ob die Transaktion groß oder klein ist, es ist immer noch nur ein Schreibvorgang auf die persistenten Medien. Außerdem sind die Schreibvorgänge immer sequentiell (immer an die Protokolldatei angehängt), so dass selbst auf drehenden Medien der Leistungseinbruch so gering wie möglich ist.
Unterschiedliche Medien haben einen größeren oder geringeren Einfluss auf die Leistung. HDD wird die größte haben, gefolgt von SSD, dann Speicher-Tier-FLASH (z. B. FusionIO PCIExpress-Karten) und die geringste Auswirkung von NVDIMM-Speicher.
NVDIMM-Speicher kann zum Speichern der In-Memory-Datenbank oder zum Speichern des Transaktionsprotokolls für die Wiederherstellung verwendet werden. Die maximale NVDIMM-Speichergröße ist kleiner als die herkömmliche Speichergröße (und teurer). Wenn Ihre speicherinterne Datenbank jedoch einige Gigabyte groß ist, kann diese Option 100% der Leistung einer speicherinternen Datenbank beibehalten und dieselbe Persistenz bieten als eine herkömmliche Datenbank auf persistenten Medien.
Es gibt Leistungsvergleiche eine In-Memory-Datenbank mit der Transaktion in diesen White Paper zu HDD, SSD und FusionIO Anmeldung: http://www.automation.com/pdf_articles/mcobject/McObject_Fast_Durable_Data_Management.pdf
Und mit NVDIMM in diesem Papier: http://www.odbms.org/wp-content/uploads/2014/06/IMDS-NVDIMM-paper.pdf
Die Papiere von uns geschrieben wurden (McObject), sind aber herstellerunabhängig.