Жогорку өндүрүмдүүлүктөгү камтылган DBMS libmdbx 0.10.4 жана libfpta 0.3.9 чыгаруу

libmdbx 0.10.4 (MDBX) китепканалары жогорку өндүрүмдүүлүктөгү компакт камтылган ачкыч-маанилер базасын ишке ашыруу менен чыгарылды жана аны менен байланышкан libfpta 0.3.9 (FPTA) китепканасы экинчи жана курама индекстер менен берилиштердин таблица түрүндө көрсөтүлүшүн ишке ашырат. MDBX үстүнө. Эки китепкана тең OSI тарабынан бекитилген лицензиялар боюнча таратылат. Бардык учурдагы операциялык системалар жана архитектуралар, ошондой эле орус Elbrus 2000 колдоого алынат.

Тарыхый жактан алганда, libmdbx LMDB DBMS терең кайра иштетүү болуп саналат жана ишенимдүүлүгү, өзгөчөлүктөр топтому жана аткаруу боюнча анын ата-бабаларынан жогору турат. LMDB менен салыштырганда, libmdbx коддун сапатына, API туруктуулугуна, тестирлөөгө жана автоматташтырылган текшерүүлөргө көп басым жасайт. Кээ бир калыбына келтирүү мүмкүнчүлүктөрү менен маалымат базасынын түзүмүнүн бүтүндүгүн текшерүү үчүн утилита берилет.

Технология боюнча, libmdbx ACIDди, күчтүү өзгөрүүлөрдү сериалдаштырууну жана процессордун өзөктөрү боюнча сызыктуу масштабдоо менен бөгөттөлбөгөн окууларды сунуштайт. Автоматтык компактификация, маалымат базасынын өлчөмүн автоматтык түрдө башкаруу жана диапазон сурамдарын баалоо колдоого алынат. 2016-жылдан тарта долбоорлорду “Позитив Технологиялар” каржылап, 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-кулпунун рекурсивдүү колдонулушу жоюлган, системанын убактысы өзгөргөн болсо, bootid генерациясы оңдолгон, WSL1 жана WSL2 аныктоо жакшыртылган жана DrvFS аркылуу орнотулган План 9 боюнча маалымат базасын ачуу кошулду.
  • Жалпысынан 160 файлга 57тан ашык өзгөртүүлөр киргизилип, ~5000 сап кошулган, ~2500 өчүрүлгөн.

Өзгөчө экстремалдык колдонуу сценарийлерин сыноодо көрсөткөн жардамы үчүн Erigon долбоорунун командасына (Ethereum экосистемасына) ыраазычылык билдиргим келет. libmdbx v0.10.0 чыгарылгандан бери беш айдын ичинде, ар бир Erigon орнотуусунда 1-2 ТБ маалымат базасы менен (Ethereum түйүндөрүнүн 7% колдонулат) маалыматтар базасынын бузулушу жөнүндө үч гана отчет алынганы маанилүү. Бул программалык камсыздоонун каталарынан эмес, тышкы себептерден улам келип чыккан: эки учурда RAM иштебей калышы себеп болгон, үчүнчүдө BTRFS аркылуу сактоо тутумунун белгилүү бир конфигурациясында маалыматтарды баштапкы абалга келтирүү катасы.

Source: opennet.ru

Комментарий кошуу