Architektur und Implementierung von Apache Derby Das Zugriffssystem Carsten Kleinmann, Michael Schmidt TH Mittelhessen, MNI, Informatik 16. Januar 2012 Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 1 / 41
Überblick 1 Kernkomponenten 2 3 Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 2 / 41
Zugriffssystem Pufferverwaltung Speicherverwaltung Kernkomponenten Zugriffssystem Datensatzformate: Datensätze fixer länge Datensätze variable länge Datensätze sehr großer länge (Blobs) Seitenformate: Seitenformate für Datensätze fixer länge Seitenformate für Datensätze variable länge Seitenformate für Datensätze sehr großer länge Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 3 / 41
Zugriffssystem Pufferverwaltung Speicherverwaltung Kernkomponenten Zugriffssystem Abbildung von Datensätzen in Dateien: Dateiorganisation Haufendatei Sequenzielle Datei Hash-Datei Systemkatalog Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 4 / 41
Zugriffssystem Pufferverwaltung Speicherverwaltung Kernkomponenten Zugriffssystem Systempufferverwaltung: Aufgaben Segment-Konzept Abbildung von Segmenten in Dateien Direkte Adressierung Indirekte Adressierung Verwaltung des Systempuffers Auffinden einer Seite Speicherzuteilung Ersetzungsstrategien für Seiten Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 5 / 41
Zugriffssystem Pufferverwaltung Speicherverwaltung Kernkomponenten Zugriffssystem Datenstrukturen: Tabelle = TableDescriptor Zeile = ValueRow Spalte = DataValueDescriptor Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 6 / 41
Zugriffssystem Pufferverwaltung Speicherverwaltung Kernkomponenten Zugriffssystem Datenstrukturen Spalte Zeile Tabelle Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 7 / 41
Zugriffssystem Pufferverwaltung Speicherverwaltung Kernkomponenten Zugriffssystem Schnittstellen Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 8 / 41
Zugriffssystem Pufferverwaltung Speicherverwaltung Kernkomponenten Pufferverwaltung Komponenten Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 9 / 41
Zugriffssystem Pufferverwaltung Speicherverwaltung Kernkomponenten Pufferverwaltung Komponenten: Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 10 / 41
Zugriffssystem Pufferverwaltung Speicherverwaltung Kernkomponenten Pufferverwaltung Algorithmen Uhr-Algorithmus Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 11 / 41
Zugriffssystem Pufferverwaltung Speicherverwaltung Kernkomponenten Speicherverwaltung Komponenten Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 12 / 41
Zugriffssystem Pufferverwaltung Speicherverwaltung Kernkomponenten Speicherverwaltung Datenstrukturen Haufendatei (Heap-file) Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 13 / 41
Zugriffssystem Pufferverwaltung Speicherverwaltung Kernkomponenten Speicherverwaltung Datenstrukturen Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 14 / 41
: Besteht aus zwei Teilen: Raw Zusammen stellen sie ACID-Eigenschaften von Transaktionen sicher Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 15 / 41
: Stellt einen row based access -Mechanismus (= Conglomerate) für den SQL Layer bereit Conglomerate (-Interface) sorgt für Tabellen- & Index-Scans, Index-Lookups, Indizierung, Sortierung, Locking, Transaktionen und Isolationslevel Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 16 / 41
Raw: Stellt die Speicherung von Zeilen einer Tabelle in Dateien bzw. in Pages, Management und Logging von Transaktionen dar Besitzt ein austauschbare File-System-API, um Dateien im Java-Filesystem, in jar-files oder anders zu speichern Bietet JCE-Verschlüsselung auf Page-Ebene Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 17 / 41
Komponenten: (Beim Starten:) Es wird das System-Modul DaemonFactory (genauer: SingleThreadDaemonFactory ) geladen sowie das Modul TransactionFactory (genauer: ConcurrentXactFactory ), LockFactory (genauer: ConcurrentPool ), DataFactory (genauer: BaseDataFileFactoryJ4 ) - diese lädt u.a. auch StorageFactory (genauer: DirStorageFactory4 ) sowie CacheFactory (genauer: ConcurrentCacheFactory ). DataFactory & TransactionFactory bzw. dessen konkrete Impl. (siehe oben) kennen die RawStoreFactory bzw. RawStore (über setter()). Dabei wird auch LogFactory (genauer: LogToFile ) geladen. Diese kennt dann auch den RawStore. HeapConglomerateFactory: boot(); dadurch wird UUIDFactory (über Monitor) geladen. Dann erhält dieser Typ von Conglomerat eine eigene UUID. Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 18 / 41
Aufbau: Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 19 / 41
Raw Store: Repräsentiert eine Einheit für die transaktionsbasierte Speicherung Einfach ausgedrückt: Alles für Persistenz Besteht aus drei Bereichen: transaction data logging Delegiert alle Anfragen an die entsprechenden Module Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 20 / 41
Segmente Segmente: Haben innerhalb des RawStore eine eindeutige Id Dienen der Speicherung von Containern Momentan werden alle Container in einem Segment gespeichert als Ordner seg0 im File-System wiedergespiegelt Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 21 / 41
Container: Container basieren auf Files Abbildung: 1 Container 1 File Konkret: Files basierend auf java.io.randomfile Mehrere IO-Operationen gleichzeitig pro File möglich Page 0 und offset 0 sind hard-codiert für eine Header-Page. Speichert Informationen über den Container Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 22 / 41
Container: Beinhaltet drei Typen von Pages: Alloc pages - speichern Informationen zu page allocation Data pages - stellen letztlich Daten dar Header pages - spezielle Art der Alloc page Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 23 / 41
Alloc Page: Spezielle Art einer normalen Data-Page Größe der Page bleibt gleich Page-Header ist jedoch größer Container leiht sich N (max. 256) bytes bei der allerersten Page Daher dient diese Page als Header-Page Weitere Alloc-Pages haben N == 0 Können bis zu 1000 Data-Pages verwalten Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 24 / 41
Pages: Beinhaltet geordnete Menge an Records Werden meist exklusiv zugegriffen latch / unlatch ID der Pages ist pro Container eindeutig Page kann 0 oder mehr Records enthalten Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 25 / 41
Pages Format: formatid - 4 bytes array page header - fixe Größe von 56 bytes records - 0 bis n, jeder Record startet mit einem Header slot offset table - 6 oder 12 bytes pro Record (ob pagesize > 64k) checksum - 8 bytes vom Typ java.util.zip.crc32 für gesamte Page (exklusive dieser 8 bytes) Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 26 / 41
Records: Records = Tupel einer Tabelle Stream von Bytes Zugriff erfolgt per Slot - definiert die Reihenfolge der Records ID - definiert die Identität der Records Hat bestimmte Mindestgröße Beinhaltet ein oder mehrere Fields Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 27 / 41
Records Format: Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 28 / 41
Fields: Fields = Attribute der Tabelle Max. Länge pro Field 2 31-1 Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 29 / 41
Fields Format: Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 30 / 41
Komponenten: Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 31 / 41
Factory: Stellt Acccess-Manager bereit, welcher transaktionsbasierten Zugriff auf Daten im Storage-Manager bietet(hier: RawStore) Hierzu existieren Conglomerate: Heap B-Tree Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 32 / 41
Conglomerate: abstrakte Speicherstruktur wird in einem oder mehreren Containern gehalten Beinhalten statische & dynamische Informationen statisch: werden in Zugriffspläne eingefügt dynamisch: dienen der Wiederverwendung bei Mehrfach-Ausführung eines Statements Kann komprimiert werden (letztlich: die Tabelle) Kann Kosten (Anzahl an Zeilen + Kosten für Scans,...) zurückgeben Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 33 / 41
Conglomerate: Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 34 / 41
Heap-Conglomerate: Zugriff ist Seiten-basierend & beinhaltet einen Container Bieten keinen Mechanismus für einen inhaltsorientierten Zugriff auf Rows in sich Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 35 / 41
Erstellen einer Tabelle Ausführung einer Select-Anweisung Techniken Erstellen einer Tabelle Starten von Derby Beim Starten: EmbeddedConnection startet Datenbank bzw. bootet diese. Der Monitor startet den Service StorageFactoryService (ist ein TopService) Der TopService beinhaltet in einem Array implementationsets für die jeweiligen Factory-Interfaces. Dieser lädt das Modul BasicDatabase. Diese wierderum lädt dann das Modul PropertyFactory bzw. PropertyValidation (wohl über den TopService). DataValueFactory wird auch durch den Service bzw. BasicDatabase geladen. Genauer wird J2SEDataValueFactory geladen (für J2SE). Danach wird noch das Modul Factory bzw. genauer RllRAMManager (da dieser RamManager erweitert, der wiederrum Factory implementiert; So wird es gefunden.) Der TopService beinhaltet am Ende alle 4 ModuleInstances (BasicDatabase, PropertyValidation, J2SEDataValueFactory und RllRamManager). Es wird auch der Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 36 / 41
Erstellen einer Tabelle Ausführung einer Select-Anweisung Techniken Erstellen einer Tabelle Hier gehts los: Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 37 / 41
Erstellen einer Tabelle Ausführung einer Select-Anweisung Techniken Ausführung einer Select-Anweisung Hier gehts los: Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 38 / 41
Erstellen einer Tabelle Ausführung einer Select-Anweisung Techniken Techniken Hier gehts los: Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 39 / 41
Zwischenstand Hier gehts los: Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 40 / 41
Vielen Dank für Ihre Aufmerksamkeit, gibt s noch Klarheiten? Carsten Kleinmann, Michael Schmidt Architektur und Implementierung von Apache Derby 41 / 41