Die Entwickler des SQLite-Projekts haben mit dem Testen des experimentellen Backends HCtree begonnen, das eine Zeilenverriegelung unterstützt und eine hohe Parallelität bei der Verarbeitung von Anfragen ermöglicht. Das neue Backend zielt darauf ab, die Effizienz der Nutzung von SQLite in Client-Server-Systemen zu erhöhen, die viele gleichzeitige Schreibanfragen an die Datenbank verarbeiten müssen.
Die ursprünglich in SQLite verwendeten b-tree-Strukturen sind nicht auf eine solche Belastung ausgelegt, was SQLite darauf beschränkt, nur in einem Thread zu schreiben. Im Rahmen eines Experiments haben die Entwickler begonnen, eine alternative Lösung zu entwickeln, die HC-tree-Strukturen für die Speicherung verwendet, die besser für die Parallelisierung von Schreiboperationen geeignet sind.
Für die gleichzeitige Ausführung mehrerer Operationen in HCtree wird ein Mechanismus zur Transaktionsaufteilung verwendet, der Seitenlevel-Sperren nutzt und MVCC (Multi-Version Concurrency Control) ähnelt, dabei jedoch Schlüssel- und Bereichsprüfung anstelle von Satzseiten anwendet. Lese- und Schreiboperationen erfolgen in Bezug auf den Datenbanksnapshot, dessen Änderungen in der Hauptdatenbank erst nach Abschluss der Transaktion sichtbar werden.
Die Kunden können drei Transaktionsöffnungsoperationen verwenden:
- „BEGIN“ – Transaktionen berücksichtigen keine Zugriffsdaten anderer Kunden. Bei der Ausführung von Schreiboperationen innerhalb einer Transaktion kann die Transaktion nur dann festgeschrieben werden, wenn während ihrer Ausführung keine anderen Schreiboperationen in der Datenbank stattfanden.
- „BEGIN CONCURRENT“ – Transaktionen sammeln Informationen über den Zugriff anderer Kunden. Bei der Ausführung von Schreiboperationen innerhalb einer Transaktion kann die Transaktion festgeschrieben werden, wenn seit Erstellen des Snapshots in der Datenbank andere Transaktionen festgeschrieben wurden.
- «BEGIN EXCLUSIVE» — nach dem Öffnen einer Transaktion werden die Operationen anderer Transaktionen bis zu deren Abschluss blockiert.
HCtree unterstützt die «Master-Slave»-Replikation, die den Transport von Transaktionen in eine andere Datenbank ermöglicht und die sekundären Datenbanken im Einklang mit der Hauptdatenbank hält. HCtree hebt auch die Begrenzung der Datenbankgröße auf – anstelle von 32-Bit-Datenseiten-IDs verwendet HCtree 48-Bit-IDs, was die maximale Datenbankgröße von 16 Tebibyte auf 1 Exbibyte (eine Million Tebibyte) erhöht. Es wird erwartet, dass die SQLite-Leistung mit dem HCtree-Backend nicht schlechter ist als bei herkömmlichen einstufigen Backends. SQLite-Clients mit HCtree-Unterstützung können sowohl auf Datenbanken basierend auf der HC-tree-Struktur als auch auf ältere SQLite-Datenbanken zugreifen.
Quelle: opennet.ru
