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