Kutolewa kwa DBMS ya utendakazi wa juu iliyopachikwa libmdbx 0.10.4 na libfpta 0.3.9

Maktaba za libmdbx 0.10.4 (MDBX) zilitolewa kwa utekelezaji wa hifadhidata ya ufunguo wa utendakazi wa hali ya juu iliyopachikwa, na maktaba inayohusiana ya libfpta 0.3.9 (FPTA), ambayo hutekeleza uwakilishi wa jedwali wa data yenye faharasa za upili na mchanganyiko. juu ya MDBX. Maktaba zote mbili zinasambazwa chini ya leseni zilizoidhinishwa na OSI. Mifumo yote ya sasa ya uendeshaji na usanifu inasaidiwa, pamoja na Elbrus 2000 ya Kirusi.

Kihistoria, libmdbx ni urekebishaji wa kina wa LMDB DBMS na ni bora kuliko babu yake katika kutegemewa, kuweka vipengele na utendaji. Ikilinganishwa na LMDB, libmdbx inasisitiza sana ubora wa msimbo, uthabiti wa API, majaribio na ukaguzi wa kiotomatiki. Huduma ya kuangalia uadilifu wa muundo wa hifadhidata na uwezo fulani wa uokoaji hutolewa.

Kiteknolojia, libmdbx inatoa ACID, urekebishaji wa mabadiliko thabiti, na usomaji usiozuia kwa kuongeza mstari kwenye core za CPU. Urekebishaji kiotomatiki, usimamizi wa saizi ya hifadhidata kiotomatiki, na makadirio ya hoja mbalimbali hutumika. Tangu 2016, miradi imefadhiliwa na Positive Technologies na tangu 2017 imetumika katika bidhaa zake.

libmdbx inatoa API ya C++, pamoja na vifungo vya lugha vinavyoungwa mkono na wapenda Rust, Haskell, Python, NodeJS, Ruby, Go, na Nim. Kwa libfpta, ni maelezo ya API pekee yanapatikana kwa umma katika mfumo wa faili ya kichwa cha C/C++.

Ubunifu mkuu, maboresho na masahihisho yaliyoongezwa tangu habari za awali mnamo Mei 9:

  • Huwasha miundo inayoweza kuzaliana.
  • Imerekebisha hitilafu kutokana na ambayo, katika hali nadra sana, kitanzi/kufungia kunaweza kutokea wakati wa ahadi ya muamala. Tatizo lilitambuliwa na wataalamu wa Positive Tecnologies wakati wa majaribio ya ndani ya bidhaa zao wenyewe.
  • Majaribio yameboreshwa na hali za majaribio zimepanuliwa ili kuangalia hali zote zinazoweza kufikiwa zisizo za isomorphic za mti wa ukurasa na maudhui ya GC ndani ya hifadhidata.
  • Katika API ya C++, "isipokuwa" ya ziada imesasishwa, upakiaji wa ziada umeongezwa kwa njia ya "cursor::erase()", utekelezaji wa buffers umeepushwa na matumizi ya "std::string" ili kuhakikisha upatanishi. (inafaa kwa CLANG libstdc++).
  • Rejea katika algoriti ya kumwagika kwa ukurasa chafu (uondoaji uliochaguliwa wa kurasa za hifadhidata iliyobadilishwa) ambayo ilidhihirishwa na hitilafu adimu isiyotarajiwa ya MDBX_PROBLEM wakati wa kubadilisha data katika miamala mikubwa imeondolewa.
  • Mtihani wa awamu ulifanyika kwa kuongeza idadi ya hundi ili kuhakikisha utulivu katika tukio la uharibifu wa makusudi kwa hifadhidata.
  • Imerekebisha maonyo madogo UndefinedBehaviorSanitizer na masuala ya Uchanganuzi wa Coverity.
  • Imerekebisha kuangalia alama ya zamani na haikutumika tena "P_DIRTY" katika kurasa zilizowekwa ndani ya picha za hifadhidata iliyoundwa na matoleo ya zamani ya maktaba.
  • Katika hati za CMake, utafutaji wa vijenzi vya mkusanyaji unaohitajika kwa LTO (uboreshaji wa muda wa kiungo) umeboreshwa.
  • Idadi ya juu ya wasomaji kwa wakati mmoja imeongezwa hadi 32767.
  • Utendaji ulioboreshwa unapotumia Valgrind na AddressSanitizer.
  • Kwenye Windows, matumizi ya kujirudia ya SRW-lock wakati wa kufanya kazi katika hali ya MDBX_NOTLS (bila kutumia hifadhi ya ndani ya thread) yameondolewa, uzalishaji wa bootid umerekebishwa ikiwa muda wa mfumo umebadilika, utambuzi wa WSL1 na WSL2 umeboreshwa, na uwezo wa fungua hifadhidata kwenye Mpango wa 9 uliowekwa kupitia DrvFS imeongezwa.
  • Kwa jumla, zaidi ya mabadiliko 160 yalifanywa kwa faili 57, ~ laini 5000 ziliongezwa, ~2500 zilifutwa.

Ningependa hasa kuwashukuru timu ya mradi wa Erigon (Ethereum ecosystem) kwa usaidizi wao katika majaribio katika hali za matumizi ya kupindukia. Ni muhimu kwamba katika miezi mitano tangu kutolewa kwa libmdbx v0.10.0, na kiasi cha hifadhidata ya 1-2 TB katika kila usakinishaji wa Erigon (hutumiwa kwa 7% ya nodi za Ethereum), ripoti tatu tu za uharibifu wa hifadhidata zilipokelewa, zote ambayo ilitokea kwa sababu za nje, na sio makosa ya programu: katika hali mbili sababu ilikuwa kushindwa kwa RAM, katika tatu kosa katika kuweka upya data katika usanidi maalum wa mfumo mdogo wa hifadhi kwa kutumia BTRFS.

Chanzo: opennet.ru

Kuongeza maoni