Die Entwickler des SQLite-Projekts haben mit dem Testen des experimentellen Backends HCtree begonnen, das eine Zeilen- (row) Sperrung unterstützt und ein hohes Maß an 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, in denen eine große Anzahl gleichzeitiger Schreibanfragen an die Datenbank bearbeitet werden muss.
Die ursprünglich in SQLite verwendeten b-tree-Strukturen sind nicht auf diese Art von Belastung ausgelegt, was SQLite die Möglichkeit der Aufzeichnung nur in einem Threads einschränkt. Als Experiment begannen die Entwickler, eine alternative Lösung zu entwickeln, die die HC-tree-Strukturen zur Speicherung verwendet und besser für die Parallelisierung von Schreiboperationen geeignet ist.
Um die gleichzeitige Ausführung mehrerer Schreiboperationen in HCtree zu organisieren, wird ein Mechanismus zur Transaktionsauflösung verwendet, der Seitenlevel-Blockierungen anwendet und dem MVCC (Multi-Version Concurrency Control) ähnlich ist, aber Transaktionsprüfungen basierend auf Schlüsseln und Schlüsselbereichen anstelle von Seiten-Sets verwendet. Lese- und Schreiboperationen werden im Zusammenhang mit einem Snapshot der Datenbank ausgeführt, dessen Änderungen in der Hauptdatenbank erst nach dem Abschluss der Transaktion sichtbar werden.
Clients können drei Arten von Transaktionsöffnungen verwenden:
- „BEGIN“ — Transaktionen berücksichtigen keine Zugriffsdaten anderer Clients. Bei der Ausführung von Schreiboperationen innerhalb einer Transaktion kann die Transaktion nur dann festgeschrieben werden, wenn es während ihrer Ausführung keine anderen Schreiboperationen in der Datenbank gab.
- „BEGIN CONCURRENT“ — Transaktionen sammeln Informationen über den Zugriff anderer Clients. Bei der Ausführung von Schreiboperationen innerhalb einer Transaktion kann die Transaktion festgeschrieben werden, wenn seit der Erstellung des Snapshots in der Datenbank andere Transaktionen festgeschrieben wurden.
- „BEGIN EXCLUSIVE“ — Einmal eröffnet, blockiert die Transaktion Operationen aus anderen Transaktionen bis zu ihrem Abschluss.
HCtree unterstützt die Master-Slave-Replikation, die es ermöglicht, Transaktionen in eine andere Datenbank zu übertragen und sekundäre Datenbanken mit der Hauptdatenbank synchronisiert zu halten. HCtree hebt auch die Einschränkung der Datenbankgröße auf — anstelle von 32-Bit-Datenseiten-IDs werden in HCtree 48-Bit-IDs verwendet, was die maximale Datenbankgröße von 16 Tebibyte auf 1 Exbibyte (eine Million Tebibyte) erhöht. Es wird erwartet, dass die Leistung von SQLite mit dem HCtree-Backend nicht unter der eines klassischen, einzügigen Backends liegt. SQLite-Clients mit Unterstützung für HCtree können sowohl auf Datenbanken basierend auf der HC-Tree-Struktur als auch auf alte SQLite-Datenbanken zugreifen.
Quelle: opennet.ru
