Transaktions-IDs
- Eine Transaktions-ID, die den Datensatz erstellt hat.
- Eine Transaktions-ID, die den Datensatz gelöscht hat (die auf 0 gesetzt wird, wenn er nicht gelöscht wurde).
Wenn das System einen Datensatz aktualisiert, löscht es den ursprünglichen Datensatz, fügt einen neuen Datensatz ein und behält die Zeilen-ID bei.
Da das System Datensätze nicht auf der Platte aktualisiert, wird die Datenintegrität gewahrt (einmaliges Schreiben) und Rollback- und Recovery-Operationen sind vereinfacht und schneller.
Wenn Sie eine Abfrage (oder Backup-Operation) ausführen, kann die Abfrage auf jeden Datensatz zugreifen, der vor Beginn dieser Transaktion erstellt, jedoch nicht gelöscht wurde. Da Transaktions-IDs sequenziell sind, vergleicht das System die Transaktions-ID-Werte für Erstellung und Löschung, um diesen Zugriff zu ermöglichen.
Allerdings gibt es eine Ausnahme: Wenn eine Transaktion anfängt, generiert sie eine Unsichtbarkeitsliste anderer aktiver Transaktionen (die eine niedrigere Transaktions-ID hätten). Die Transaktion ignoriert alle Datensätze mit einer übereinstimmenden Transaktions-ID für Erstellung und enthält alle Datensätze mit einer übereinstimmenden Transaktions-ID für Löschung.
Eine Transaktions-ID ist ein 8-Byte-Ganzzahlwert, von dem 48 Bit signifikant sind. Bei Neuinstallationen ist der ursprüngliche Wert der Transaktions-ID 1.024. Das System speichert den nächsten verfügbaren Transaktions-ID-Wert in der Datei /nz/data/xid.
Die Größe der Transaktions-ID lässt mehr 100 Trillionen Transaktions-IDs zu, was bei einer Transaktion pro Millisekunde mehr als 4000 Jahre dauern würde. In der Praxis werden die Transaktions-IDs wahrscheinlich langsamer generiert und es würde länger dauern, bis sie aufgebraucht sind.