Persistenz (Informatik)
Persistenz (von lateinisch persistere „verharren, stehen bleiben“) ist in der Informatik die Eigenschaft eines Systems, den Zustand seiner Daten, seines Objektmodells und/oder seiner logischen Verbindungen über lange Zeit – insbesondere über einen geplanten oder ungeplanten Programmabbruch hinaus – bereitzuhalten. Dafür wird ein nichtflüchtiges Speichermedium benötigt; auch das Dateisystem oder eine Datenbank sowie eine durch Protokolle gesicherte bidirektionale und transaktionsorientierte Datenübertragung können als nichtflüchtiges Medium betrachtet werden. Da ein Programm jederzeit unvorhergesehen unterbrochen werden kann, bedeutet persistente Datenhaltung insbesondere, dass jede Zustandsänderung der Daten sofort auf dem nichtflüchtigen Medium gespeichert werden muss.
Darüber hinaus wird der Begriff im Zusammenhang mit eindeutigen und dauerhaften Identifikatoren digitaler Objekte verwendet, siehe PURL, DOI, URN.
„Persistent“ wird in diesem Kontext als Synonym für „nicht unkontrolliert veränderlich“ verwendet. Das bedeutet beispielsweise, dass die Daten auch nach Beenden des Programms (gegebenenfalls auch bei unvorhergesehenem Beenden, z. B. bei Stromausfall) vorhanden (gespeichert) bleiben, und bei erneutem Aufruf des Programms wieder rekonstruiert und angezeigt werden können[1]. Bezüglich der logischen Verbindungen bedeutet Persistenz, dass die reale Verbindung bei Bedarf/nach einem Ausfall wiederhergestellt wird, möglichst ohne dass die zwischenzeitliche Trennung durch die Kommunikationspartner bemerkt wird.
Daten, die diese Eigenschaft nicht besitzen, existieren beispielsweise nur im Hauptspeicher des Computers und verändern oder verlieren ihren Inhalt, sobald das Programm beendet wird, von dem sie verwendet wurden. Solche „flüchtigen“ Daten werden transient genannt (s. Pufferung).
Unter einer persistenten Verbindung ist eine andauernde, anhaltende Verbindung zu verstehen, die kurzzeitige Unterbrechungen überdauert, ohne dass sich ihr Informationsinhalt ändert.
Persistenz bei objektorientierten Programmen
Verschiedene Entwurfsmuster wie zum Beispiel „Data Access Object“ unterstützen ein Daten-persistentes Software-Design, auch das Observer-Pattern unterstützt eine einfache Umsetzung persistenter Datenhaltung, die dann auch das ACID-Prinzip einhalten sowie transaktionsbasierend arbeiten muss.
Es gibt Frameworks, die automatisch dafür sorgen, dass bei ihnen registrierte Objekte persistent auf einem dauerhaften Speichermedium abgelegt sind, sogenannte Persistenzprovider. Es gibt Open-Source-Persistenzprovider (z. B. Hibernate), typischerweise bieten auch die Hersteller von Datenbanken Implementierungen für Persistenzprovider an. Sie bieten eine einheitliche Schnittstelle für verschiedene persistente Speichermedien (Dateisystem, RDBMS, Directory-Service, B2B-Service und so weiter).
Diese Frameworks setzen meist voraus, dass die Objekte entweder serialisierbar oder objektrelational abbildbar sind. Bei der Serialisierung kann das Objekt als serieller Datenstrom in ein persistentes Speichermedium geschrieben werden (z. B. durch „Java I/O Streams“). Die andere Möglichkeit ist die objektrelationale Abbildung (object-relational mapping).
Auf Betriebssystem-Ebene garantiert ein Journaling-fähiges Dateisystem, dass nach einer (ungewollten) Unterbrechung eine Wiederherstellung möglich ist.
Verantwortlichkeit bei existierender Laufzeitumgebung
Innerhalb eines Anwendungsservers unterscheidet man zwischen containerbasierter Persistenz (die Laufzeitumgebung übernimmt das Speichern und Wiederherstellen) und komponentenbasierter Persistenz (die Komponente muss selbst speichern und wiederherstellen). Im Beispiel Java wären für die containerbasierte Persistenz die Enterprise JavaBeans (EJBs) verantwortlich. Dabei muss ab Java Platform, Enterprise Edition 5 jede zu persistierende Klasse mit der Annotation @Entity
ausgezeichnet werden.[2]
Weblinks
Einzelnachweise
- ↑ Persistenz/persistence. In: IT Wissen. DATACOM Buchverlag, abgerufen am 19. August 2008.
- ↑
Entity
(Java EE 5 API) bei Oracle (englisch)