Rhyddhau libmdbx DBMS mewnosodedig perfformiad uchel 0.10

Ar ôl tri mis o ddatblygiad, rhyddhawyd libmdbx 0.10.0 (MDBX), gan weithredu cronfa ddata gwerth allweddol cryno wedi'i hymgorffori, perfformiad uchel. Mae'r cod libmdbx wedi'i drwyddedu o dan Drwydded Gyhoeddus OpenLDAP. Mae libmdbx yn ailweithio dwfn o'r LMDB DBMS ac, yn ôl y datblygwyr, mae'n well na'i hynafiad o ran dibynadwyedd, ystod galluoedd a pherfformiad. Dywedir bod libmdbx hyd at 20% yn gyflymach na LMDB mewn senarios CRUD a hyd at 30% yn gyflymach os yw rheolaethau mewnol yn anabl wrth adeiladu libmdbx i lefel sy'n debyg i LMDB.

Mae Libmdbx yn cynnig ACID, cyfresoli newid cryf, ac mae di-rwystro yn darllen y raddfa honno'n llinol ar draws creiddiau CPU. Yn libmdbx, rhoddir llawer o sylw i ansawdd cod, gweithrediad API sefydlog, profion a gwiriadau awtomatig. Yn cefnogi awto-gywasgu, rheoli maint cronfa ddata yn awtomatig, fformat cronfa ddata sengl ar gyfer gwasanaethau 32-bit a 64-bit, ac amcangyfrif ymholiad amrediad. Darperir cyfleustodau ar gyfer gwirio cywirdeb strwythur y gronfa ddata gyda rhai galluoedd adfer. Ers 2016, mae'r prosiect wedi'i ariannu gan Positive Technologies ac mae wedi'i ddefnyddio yn ei gynhyrchion ers 2017, ac nid yw'r sancsiynau a osodwyd gan lywodraeth yr UD yn erbyn Positive Technologies yn cael unrhyw effaith amlwg.

Arloesiadau, gwelliannau ac atebion mawr a ychwanegwyd ers y datganiad diwethaf:

  • Mae rhwymiad Rwbi gan Mahlon E. Smith a fersiwn prawf o rwymiadau Python gan Noel Kuntze ar gael, ac mae rhwymiadau GoLang gan Alexey Sharov wedi'u diweddaru.
  • Ar gyfer y modd “MDBX_WRITEMAP”, pan fydd data cronfa ddata yn cael ei newid yn uniongyrchol mewn RAM, gweithredir “gollyngiad tryloyw” o dudalennau cronfa ddata wedi'u newid i ddisg. Nawr, ar ôl cwblhau pob gweithrediad, mae tudalennau o'r fath ar unwaith yn gwbl barod i'w hysgrifennu ar ddisg a gall cnewyllyn yr AO fflysio'r tudalennau wedi'u newid i ddisg yn annibynnol, ac ni fydd angen eu haddasu i gyflawni trafodiad. O ganlyniad, mewn senarios prysur gyda RAM annigonol, gellir lleihau nifer y gweithrediadau disg hyd at 2 waith.
  • Gweithredu troi allan o gopïau cysgodol hir-nas defnyddiwyd o dudalennau wedi'u haddasu, gyda ffafriaeth i droi allan o dudalennau gyda gwerthoedd mawr/hir, sydd yn y mwyafrif helaeth o senarios yn cael eu haddasu unwaith yn unig y trafodiad. Y canlyniad yw llai o draffig disg a pherfformiad gwell mewn senarios gyda thrafodion mawr iawn.
  • Wedi gweithredu modd “clyfar” ar gyfer hollti tudalennau wrth fewnosod allweddi. Nawr, wrth fewnosod dilyniannau gorchymyn, mae'r tudalennau'n cael eu llenwi'n llwyr yn awtomatig, ac mewn achosion eraill, mae'r goeden yn fwy cytbwys yn y ffordd orau bosibl. O ganlyniad, ar gyfartaledd, mae tudalennau cronfa ddata yn cael eu llenwi'n fwy optimaidd ac mae'r goeden B yn fwy cytbwys, sy'n cael effaith gadarnhaol ar berfformiad.
  • Mae ystadegau gweithrediadau gyda thudalennau wedi'u hychwanegu, sy'n eich galluogi i amcangyfrif yn gywir y gost o addasu gweithrediadau gyda'r gronfa ddata.
  • Mae mwy na dwsin o fygiau a chwilod wedi'u trwsio, gan gynnwys: problemau gydag adeiladu gan ddefnyddio MinGW, defnyddio `std::filesystem::path` yn iOS <= 13.0, adeiladu targedu fersiynau hŷn o Windows, ac ati.
  • Yn gyfan gwbl, gwnaed mwy na 200 o newidiadau i 66 o ffeiliau, ychwanegwyd ~6500 o linellau, ~ dilëwyd ~4500.

Ar wahân, hoffwn nodi dewis y prosiect Turbo-Geth (fforch turbo o Go-Ethereum) libmdbx fel backend storio newydd, a hefyd diolch i dîm y prosiect (yn enwedig Alexey Sharov, Artyom Vorotnikov ac Alexey Akhunov) am eu help mawr i brofi mewn senarios achos defnydd eithafol. Yn benodol, darganfuwyd a dilëwyd diffyg yn y rheolaeth darllen ymlaen llaw/caching, a arweiniodd at ddiraddio perfformiad mewn senarios anodd eu hatgynhyrchu gyda chronfeydd data mawr.

Ffynhonnell: opennet.ru

Ychwanegu sylw