Структуры 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.
Источник: http://www.opennet.ru/opennews/art.shtml?num=58508