SQLite-Entwickler entwickeln ein HC-Tree-Backend mit Unterstützung für parallele Schreibvorgänge

SQLite-Projektentwickler haben mit dem Testen eines experimentellen HCtree-Backends begonnen, das Sperren auf Zeilenebene unterstützt und ein hohes Maß an Parallelisierung bei der Verarbeitung von Abfragen bietet. Das neue Backend soll die Effizienz des Einsatzes von SQLite in Client-Server-Systemen verbessern, die eine große Anzahl gleichzeitiger Schreibanfragen an die Datenbank verarbeiten müssen.

Die in SQLite nativ zum Speichern von Daten verwendeten B-Tree-Strukturen sind nicht für diese Art von Last ausgelegt, was SQLite auf das Schreiben in nur einen Thread beschränkt. Experimentell begannen die Entwickler mit der Entwicklung einer alternativen Lösung, die HC-Baumstrukturen zur Speicherung nutzt, die sich besser für die Parallelisierung von Schreibvorgängen eignen.

Um die gleichzeitige Ausführung mehrerer Vorgänge zu ermöglichen, verwendet ein HCtree-Datensatz einen Transaktionspartitionierungsmechanismus, der Sperren auf Seitenebene verwendet und MVCC (Multi-Version Concurrency Control) ähnelt, jedoch Transaktionsprüfungen basierend auf Schlüsseln und Schlüsselbereichen anstelle von Seitensätzen verwendet. Lese- und Schreibvorgänge werden in Verbindung mit einem Datenbank-Snapshot durchgeführt, dessen Änderungen erst nach Abschluss der Transaktion in der Hauptdatenbank sichtbar werden.

Kunden können drei offene Transaktionsoperationen nutzen:

  • „BEGIN“ – Transaktionen berücksichtigen keine Zugangsdaten anderer Clients. Wenn innerhalb einer Transaktion Schreibvorgänge ausgeführt werden, kann die Transaktion nur dann festgeschrieben werden, wenn während ihrer Ausführung keine anderen Schreibvorgänge in der Datenbank stattgefunden haben.
  • „BEGIN CONCURRENT“ – Transaktionen sammeln Informationen über den Zugriff anderer Clients. Wenn Schreibvorgänge innerhalb einer Transaktion ausgeführt werden, kann die Transaktion festgeschrieben werden, wenn seit der Erstellung des Snapshots andere Transaktionen in der Datenbank festgeschrieben wurden.
  • „BEGIN EXKLUSIV“ – nach dem Öffnen einer Transaktion werden Vorgänge von anderen Transaktionen blockiert, bis sie abgeschlossen ist.

HCtree unterstützt die Master-Slave-Replikation, die es Ihnen ermöglicht, Transaktionen in eine andere Datenbank zu migrieren und sekundäre Datenbanken mit der primären Datenbank synchron zu halten. HCtree hebt auch die Beschränkung der Datenbankgröße auf – anstelle von 32-Bit-Datenseitenbezeichnern verwendet HCtree 48-Bit-Bezeichner, wodurch die maximale Datenbankgröße von 16 Tebibyte auf 1 Exbibyte (Million Tebibyte) erhöht wird. Es wird erwartet, dass die Leistung von SQLite mit dem HCtree-Backend nicht geringer sein wird als die des klassischen Single-Threaded-Backends. SQLite-Clients mit HCtree-Unterstützung können sowohl auf HC-Tree-basierte Datenbanken als auch auf ältere SQLite-Datenbanken zugreifen.

Source: opennet.ru

Kommentar hinzufügen