Жоғары өнімді ендірілген ДҚБЖ libmdbx 0.10.4 және libfpta 0.3.9 шығарылымы

libmdbx 0.10.4 (MDBX) кітапханалары өнімділігі жоғары ықшам ендірілген кілт-мән дерекқорын және қосымша және құрама индекстері бар деректердің кестелік көрінісін жүзеге асыратын байланысты libfpta 0.3.9 (FPTA) кітапханасын іске асыру арқылы шығарылды. MDBX үстінде. Екі кітапхана да OSI мақұлдаған лицензиялар бойынша таратылады. Барлық ағымдағы операциялық жүйелер мен архитектураларға, сондай-ақ ресейлік Эльбрус 2000 нұсқасына қолдау көрсетіледі.

Тарихи тұрғыдан алғанда, libmdbx LMDB ДҚБЖ терең қайта өңдеу болып табылады және сенімділік, мүмкіндіктер жиынтығы және өнімділік бойынша оның ата-бабасынан жоғары. LMDB-мен салыстырғанда, libmdbx код сапасына, API тұрақтылығына, тестілеуге және автоматтандырылған тексерулерге көп көңіл бөледі. Кейбір қалпына келтіру мүмкіндіктері бар дерекқор құрылымының тұтастығын тексеруге арналған қызметтік бағдарлама жеткізіледі.

Технология тұрғысынан libmdbx ACID, күшті өзгерістер сериялауын және процессор өзектері бойынша сызықтық масштабтау арқылы блокталмаған оқуларды ұсынады. Автоматты ықшамдауға, дерекқор өлшемін автоматты басқаруға және ауқымды сұрауды бағалауға қолдау көрсетіледі. 2016 жылдан бастап жобаларды Positive Technologies қаржыландырып, 2017 жылдан бастап оның өнімдерінде қолданыла бастады.

libmdbx C++ API интерфейсін, сондай-ақ Rust, Haskell, Python, NodeJS, Ruby, Go және Nim үшін энтузиастар қолдайтын тіл байлауларын ұсынады. libfpta үшін тек API сипаттамасы C/C++ тақырып файлы түрінде жалпыға қолжетімді.

9 мамырдағы алдыңғы жаңалықтардан кейін қосылған негізгі инновациялар, жақсартулар мен түзетулер:

  • Қайталанатын құрылымдарды қосады.
  • Қате түзетілді, соның салдарынан өте сирек жағдайларда транзакцияны орындау кезінде цикл/қатыру орын алуы мүмкін. Мәселені Positive Technologies мамандары өз өнімдерін ішкі тестілеу кезінде анықтады.
  • Дерекқордағы бет ағашының және GC мазмұнының барлық қолжетімді изоморфты емес күйлерін тексеру үшін сынақтар жақсартылды және сынақ сценарийлері кеңейтілді.
  • C++ API-де қосымша «noexcept» түзетілді, «курсор::erase()» әдісі үшін қосымша шамадан тыс жүктемелер қосылды, буферлерді іске асыру теңестіруді қамтамасыз ету үшін «std::string» пайдалануды сақтады. (CLANG libstdc++ үшін қатысты).
  • Үлкен транзакциялардағы деректерді өзгерту кезінде сирек күтпеген MDBX_PROBLEM қатесі арқылы көрінетін ластанған бетті төгу алгоритміндегі регрессия жойылды (өзгертілген дерекқор беттерін таңдаулы шығару).
  • Дерекқорға қасақана зақым келген жағдайда тұрақтылықты қамтамасыз ету үшін бірқатар тексерулерді қосу арқылы кезеңдік сынақ жүргізілді.
  • Түзетілген кішігірім ескертулер UndefinedBehaviorSanitizer және Coverity Scan мәселелері.
  • Кітапхананың ескі нұсқалары жасаған дерекқор кескіндерінің ішіндегі кірістірілген беттердегі ескірген және енді пайдаланылмайтын ішкі жалауша «P_DIRTY» тексеруі түзетілді.
  • CMake сценарийлерінде LTO (сілтеме уақытын оңтайландыру) үшін қажетті компилятор құрамдастарын іздеу жақсартылды.
  • Бір мезгілде оқырмандардың максималды саны 32767-ге дейін ұлғайтылды.
  • Valgrind және AddressSanitizer пайдалану кезінде жақсартылған өнімділік.
  • Windows жүйесінде MDBX_NOTLS режимінде жұмыс істегенде SRW-құлыпты рекурсивті пайдалану (жіптің жергілікті жадын пайдаланбай) жойылды, егер жүйе уақыты өзгерсе, жүктеу генерациясы түзетілді, WSL1 және WSL2 анықтау жақсартылды және DrvFS арқылы орнатылған 9 жоспарында дерекқорды ашу қосылды.
  • Барлығы 160 файлға 57-нан астам өзгертулер енгізілді, ~5000 жол қосылды, ~2500 жойылды.

Еригон жобасының командасына (Ethereum экожүйесі) экстремалды пайдалану сценарийлерінде тестілеуге көмектескені үшін ерекше алғыс айтқым келеді. libmdbx v0.10.0 шығарылымынан бері бес айдың ішінде әрбір Erigon қондырғысында 1-2 ТБ дерекқор көлемімен (Ethereum түйіндерінің 7% пайдаланылады) дерекқордың бүлінуі туралы тек үш хабарлама алынғаны маңызды. бағдарламалық жасақтама қателерінен емес, сыртқы себептерге байланысты болды: екі жағдайда ЖЖҚ ақаулары себеп болды, үшіншіде BTRFS көмегімен сақтау ішкі жүйесінің белгілі бір конфигурациясындағы деректерді қалпына келтіру қатесі.

Ақпарат көзі: opennet.ru

пікір қалдыру