Објавување на DBMS libmdbx 0.11.7. Преместете го развојот во GitFlic по заклучувањето на GitHub

Библиотеката libmdbx 0.11.7 (MDBX) беше објавена со имплементација на компактна вградена база на податоци со вредности на клучеви со високи перформанси. Кодот libmdbx е лиценциран под јавна лиценца OpenLDAP. Поддржани се сите сегашни оперативни системи и архитектури, како и рускиот Elbrus 2000.

Изданието е забележливо по миграцијата на проектот во услугата GitFlic откако на 15 април 2022 година, администрацијата на GitHub, без никакво предупредување или објаснување, го избриша libmdbx заедно со мноштво други проекти, додека истовремено го блокираше пристапот до многу програмери поврзани со компании кои подлежат на американски санкции. Од гледна точка на корисниците, сите страници, складиштето и вилушките на проектот одеднаш се претворија во страница 404, без можност за каква било комуникација и откривање на причините.

За жал, речиси сите прашања, во кои имаше многу прашања со детални одговори, како и многу дискусии, се изгубени. Губењето на овие информации е единствената објективна штета што администрацијата на GitHub успеа да му ја нанесе на проектот. Делумни копии од дискусиите остануваат достапни на archive.org.

Губењето на изградените CI сценарија и инфраструктура (достапни за проектите на OpenSource бесплатно) не принудија да преземеме ревизија, обединување и елиминирање на малите технички долгови. Сега CI е обновен во речиси иста мера, со исклучок на тестовите за изградба и извршување за сите варијанти на BSD и Solaris. Вообичаено, по акциите, GitHub не добиваше никакви појаснувања или известувања, освен потсетници за потребата од плаќање и обиди за отпис на пари.

Од последните вести за објавувањето на libmdbx v0.11.3, покрај закрепнувањето од активностите на GitHub, вреди да се забележат и следните подобрувања и поправки:

  • Додадено е решение за откриен ефект/дефект на некохерентност во комбинираната страница и кешот на баферот во кернелот на Linux. Во системите каде што кешот на страницата и баферот се навистина комбинирани, нема смисла кернелот да ја троши меморијата за две копии од податоци кога пишува во датотека што е веќе мапирана во меморијата. Затоа, податоците што се пишуваат стануваат видливи преку мемориското мапирање пред да заврши системскиот повик write(), дури и ако податоците сè уште не се запишани на дискот.

    Општо земено, другото однесување не е рационално, бидејќи со одложено спојување, сепак ќе мора да стекнете брави за списоци на страници, да копирате податоци или да приспособите PTE. Затоа, неискажаното правило за кохерентност е на сила од 1989 година, кога унифицираната тампон кеш се појави во SRV4. Затоа, откривањето чудни падови во натоварените сценарија за експлоатација на libmdbx бараше многу работа. Прво да се репродуцира проблемот, потоа да се проверат хипотезите и да се тестираат подобрувањата.

    Сега можеме со сигурност да кажеме дека проблемот е веродостојно идентификуван, локализиран и сигурно елиминиран, и покрај сложеноста и специфичноста на сценариото за репродукција. Дополнително, работата на механизмот за бајпас беше потврдена од еден од развивачите на Erigon (Ethereum); во неговиот случај, при конструкцијата за отстранување грешки, заштитата беше активирана како регресија поради непотребна проверка на тврдењето.

    Треба да се забележи дека во контекст на широко распространетата употреба на libmdbx во производствени проекти, осигурувањето доверливо работење е фундаментално поважно отколку да се открие дали се работи за грешка или карактеристика и дали може да се потпре на таквата кохерентност, а уште помалку да се бара причини за некохерентност во кернелот на Линукс. Затоа, овде зборуваме за поправање на проблем што можеби ги погодил корисниците.

  • Регресијата на грешката EXDEV (врска меѓу уреди) при жешко копирање база на податоци без компактирање во друг датотечен систем, и преку API и со помошната алатка mdbx_copy, е елиминирана.
  • Kris Zyp имплементираше поддршка за libmdbx во Deno. Kai Wetlesen дизајнираше RPM пакување за Fedora. Дејвид Буисие имплементирал врски за Скала.
  • Фиксна обработка на вредноста наведена со опцијата MDBX_opt_rp_augment_limit при обработка на огромни трансакции во големи бази на податоци. Претходно, поради грешка, можеше да се извршат непотребни дејства, што понекогаш влијаеше на перформансите во имплементациите на Ethereum (Erigon/Akula/Silkworm) и проектите на Binance Chain.
  • Поправени се многу грешки, вклучително и во C++ API. Поправени многу проблеми со изградбата во ретки и егзотични конфигурации. Комплетна листа на сите значајни подобрувања е достапна во ChangeLog.
  • Направени се вкупно 185 промени на 89 датотеки, додадени се ≈3300 линии, ≈4100 се избришани. Повеќе беа отстранети главно поради чистењето на веќе бескорисните технолошки датотеки поврзани со GitHub и зависните услуги.

Историски гледано, libmdbx е длабока преработка на LMDB DBMS и е супериорен во однос на неговиот предок по доверливост, сет на функции и перформанси. Во споредба со LMDB, libmdbx става голем акцент на квалитетот на кодот, стабилноста на API, тестирањето и автоматизираните проверки. Обезбедена е алатка за проверка на интегритетот на структурата на базата на податоци со некои можности за обновување.

Во однос на технологијата, libmdbx нуди ACID, серијализација на силни промени и читања без блокирање со линеарно скалирање низ јадрата на процесорот. Поддржани се автоматска компактификација, автоматско управување со големината на базата на податоци и проценка на барање за опсег. Од 2016 година, проектот е финансиран од Позитивни технологии и се користи во нејзините производи од 2017 година.

libmdbx нуди развиен C++ API, како и врзувања поддржани од ентузијасти за јазиците Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Извор: opennet.ru

Додадете коментар