Распрацоўнікі праекту 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