Розробники проекту SQLite розпочали тестування експериментального бекенду HCtree, що підтримує блокування на рівні рядків (row) та забезпечує високий рівень розпаралелювання при обробці запитів. Новий бекенд націлений підвищення ефективності використання SQLite в клиент-серверных системах, у яких доводиться обробляти багато одночасних запитів до БД на запис.
Структури b-tree, які спочатку застосовуються в SQLite для зберігання даних, не розраховані на подібний вид навантаження, що обмежує SQLite можливістю запису тільки в один потік. Як експеримент розробники стали розвивати альтернативне рішення, що використовує для зберігання структури HC-tree, більш придатні для розпаралелювання операцій запису.
Для організації одночасного виконання кількох операцій у HCtree запису застосовується механізм поділу транзакцій, що використовує блокування на рівні сторінок і схожий на MVCC (багатоверсійне управління конкурентним доступом), але використовує перевірки транзакцій на основі ключів та діапазонів ключів замість наборів сторінок. Операції читання та запису виконуються у прив'язці до снапшота БД, зміна якого стають видимими в основній БД тільки після завершення транзакції.
Клієнти можуть використовувати три операції для відкриття транзакцій:
- BEGIN — транзакції не враховують дані про доступ інших клієнтів. У разі виконання всередині транзакції операцій запису транзакція може бути зафіксована тільки якщо за час її здійснення не було інших операцій запису у БД.
- "BEGIN CONCURRENT" - транзакції збирають відомості про доступ інших клієнтів. У разі виконання всередині транзакції операцій запису транзакція може бути зафіксована, якщо з моменту створення снапшота в БД були зафіксовані інші транзакції.
- BEGIN EXCLUSIVE — після відкриття транзакції блокує операції з інших транзакцій до завершення.
HCtree підтримує реплікацію в стилі "master-slave", що дозволяє переносити транзакції в іншу БД та підтримувати вторинні БД у стані, синхронізованому з основною БД. HCtree також знімає обмеження на розмір БД – замість 32-розрядних ідентифікаторів сторінок даних у HCtree застосовуються 48 розрядні, що підвищує максимальний розмір БД з 16 тебібайт до 1 ексбібайт (мільйон тебібайт). Очікується, що продуктивність SQLite з бекендом HCtree буде не нижчою за класичний однопоточний бекенд. Клієнти SQLite за допомогою HCtree зможуть звертатися як до БД на базі структури HC-tree, так і до старих БД SQLite.
Джерело: opennet.ru