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

Дадаць каментар