Liberigo de alt-efikeca enigita DBMS libmdbx 0.10.4 kaj libfpta 0.3.9

La libmdbx 0.10.4 (MDBX) biblioteko estis publikigita kun la efektivigo de alt-efikeca kompakta enigita ŝlosil-valora datumbazo, kaj la rilata libfpta 0.3.9 (FPTA) biblioteko, kiu efektivigas tabelan reprezentadon de datenoj kun sekundaraj kaj kunmetitaj indeksoj. supre de MDBX. Ambaŭ bibliotekoj estas distribuitaj sub OSI-aprobitaj licencoj. Ĉiuj nunaj operaciumoj kaj arkitekturoj estas subtenataj, same kiel la rusa Elbrus 2000.

Historie, libmdbx estas profunda reverkado de la LMDB DBMS kaj superas sian prapatron en fidindeco, funkcioj kaj rendimento. Kompare kun LMDB, libmdbx multe emfazas kodkvaliton, API-stabilecon, testadon kaj aŭtomatigitajn kontrolojn. Ilo por kontroli la integrecon de la datumbaza strukturo kun kelkaj reakiro-kapabloj estas liverita.

Teknologie, libmdbx ofertas ACID, fortan ŝanĝan seriigon kaj ne-blokantajn legadojn kun lineara skalo trans CPU-kernoj. Aŭtomata kompaktigo, aŭtomata datumbaza grandadministrado kaj interval-demanda takso estas subtenataj. Ekde 2016, projektoj estas financitaj de Positive Technologies kaj ekde 2017 estas uzataj en ĝiaj produktoj.

libmdbx ofertas C++ API, same kiel entuziasmul-subtenatajn lingvoligojn por Rust, Haskell, Python, NodeJS, Ruby, Go kaj Nim. Por libfpta, nur la API-priskribo estas publike havebla en la formo de C/C++-kapa dosiero.

Gravaj novigoj, plibonigoj kaj korektoj aldonitaj ekde la antaŭa novaĵo la 9-an de majo:

  • Ebligas reprodukteblajn konstruojn.
  • Korektis cimon pro kiu, en tre maloftaj cirkonstancoj, buklo/frosto povus okazi dum transakcio-komisio. La problemo estis identigita de specialistoj de Positive Tecnologies dum interna testado de siaj propraj produktoj.
  • Testoj estis plibonigitaj kaj testscenaroj estis vastigitaj por kontroli ĉiujn atingeblajn ne-izomorfajn statojn de la paĝarbo kaj GC-enhavon ene de la datumbazo.
  • En la C++ API, ekstra "noexcept" estis riparita, kromaj superŝarĝoj estis aldonitaj por la "cursor::erase()" metodo, la efektivigo de bufroj estis ŝparita la uzo de "std::string" por certigi vicigon. (rilata por CLANG libstdc++).
  • Regreso en la malpura paĝo-disverŝa algoritmo (selektema elĵeto de ŝanĝitaj datumbazaj paĝoj) kiu estis manifestita per malofta neatendita MDBX_PROBLEM-eraro kiam ŝanĝado de datumoj en grandegaj transakcioj estis forigita.
  • Faza testo estis farita kun la aldono de kelkaj kontroloj por certigi stabilecon en la okazaĵo de intencita damaĝo al la datumbazo.
  • Korektis negravajn avertojn UndefinedBehaviorSanitizer kaj Coverity Scan problemojn.
  • Riparita kontrolado de la malmoderna kaj ne plu uzata interna flago "P_DIRTY" en nestitaj paĝoj ene de datumbazoj kreitaj de pli malnovaj versioj de la biblioteko.
  • En CMake-skriptoj, la serĉo de kompililkomponentoj necesaj por LTO (liga tempo-optimumigo) estis plibonigita.
  • La maksimuma nombro da samtempaj legantoj estis pliigita al 32767.
  • Plibonigita rendimento kiam vi uzas Valgrind kaj AddressSanitizer.
  • En Vindozo, la rekursiva uzo de SRW-lock dum laboro en MDBX_NOTLS-reĝimo (sen uzi fadenan lokan stokadon) estis forigita, bootid-generado estis riparita se la sistema tempo ŝanĝiĝis, WSL1 kaj WSL2-detekto estis plibonigita, kaj la kapablo por malfermi datumbazon sur Plano 9 muntita per DrvFS estis aldonita.
  • Entute, pli ol 160 ŝanĝoj estis faritaj al 57 dosieroj, ~5000 linioj estis aldonitaj, ~2500 estis forigitaj.

Mi precipe ŝatus danki la projektan teamon de Erigon (Ethereum-ekosistemo) pro ilia helpo en testado en ekstremaj uzaj scenaroj. Estas signifa, ke en kvin monatoj ekde la liberigo de libmdbx v0.10.0, kun datumbaza volumo de 1-2 TB en ĉiu Erigon-instalaĵo (uzita sur 7% de Ethereum-nodoj), nur tri raportoj pri datumbaza korupto estis ricevitaj, ĉiuj. kiu okazis pro eksteraj kialoj, kaj ne programaraj eraroj: en du kazoj la kaŭzo estis RAM-malsukcesoj, en la tria eraro en restarigo de datumoj en specifa agordo de la stokadsubsistemo uzante BTRFS.

fonto: opennet.ru

Aldoni komenton