Розробники SQLite розвивають бекенд HC-tree з підтримкою паралельних операцій запису

Розробники проекту 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

Додати коментар або відгук