Yüksək performanslı quraşdırılmış DBMS libmdbx 0.10.4 və libfpta 0.3.9-un buraxılışı

Libmdbx 0.10.4 (MDBX) kitabxanası yüksək performanslı yığcam daxil edilmiş açar-dəyər verilənlər bazası və ikinci dərəcəli və kompozit indekslərlə verilənlərin cədvəlli təsvirini həyata keçirən əlaqəli libfpta 0.3.9 (FPTA) kitabxanasının tətbiqi ilə buraxılmışdır. MDBX-in üstündə. Hər iki kitabxana OSI tərəfindən təsdiq edilmiş lisenziyalar əsasında paylanır. Bütün cari əməliyyat sistemləri və arxitekturaları, eləcə də Rus Elbrus 2000 dəstəklənir.

Tarixən libmdbx LMDB DBMS-nin dərindən işlənməsidir və etibarlılıq, xüsusiyyətlər dəsti və performans baxımından əcdadından üstündür. LMDB ilə müqayisədə libmdbx kodun keyfiyyətinə, API sabitliyinə, sınaqlara və avtomatlaşdırılmış yoxlamalara çox diqqət yetirir. Bəzi bərpa imkanları ilə verilənlər bazası strukturunun bütövlüyünü yoxlamaq üçün bir yardım proqramı verilir.

Texnologiya baxımından libmdbx ACID, güclü dəyişiklik serializasiyası və CPU nüvələri arasında xətti miqyasla bloklanmayan oxunuşlar təklif edir. Avtomatik kompaktlaşdırma, verilənlər bazası ölçüsünün avtomatik idarə edilməsi və diapazon sorğusunun qiymətləndirilməsi dəstəklənir. 2016-cı ildən layihələr Positive Technologies tərəfindən maliyyələşdirilir və 2017-ci ildən məhsullarında istifadə olunur.

libmdbx C++ API, həmçinin Rust, Haskell, Python, NodeJS, Ruby, Go və Nim üçün həvəskarlar tərəfindən dəstəklənən dil bağlamaları təklif edir. Libfpta üçün yalnız API təsviri C/C++ başlıq faylı şəklində açıqdır.

Mayın 9-da əvvəlki xəbərdən sonra əlavə edilən əsas yeniliklər, təkmilləşdirmələr və düzəlişlər:

  • Təkrarlana bilən quruluşlara imkan verir.
  • Çox nadir hallarda əməliyyatın icrası zamanı döngə/dondurma baş verə bilən səhv düzəldildi. Problem Positive Technologies mütəxəssisləri tərəfindən öz məhsullarının daxili sınaqları zamanı müəyyən edilib.
  • Səhifə ağacının bütün əlçatan qeyri-izomorf vəziyyətlərini və verilənlər bazasında GC məzmununu yoxlamaq üçün testlər təkmilləşdirilmiş və sınaq ssenariləri genişləndirilmişdir.
  • C++ API-də əlavə “noexcept” düzəldildi, “kursor:: sil ()” metodu üçün əlavə yüklənmələr əlavə edildi, buferlərin həyata keçirilməsi hizalanmağı təmin etmək üçün “std:: string” istifadəsindən qorundu. (CLANG libstdc++ üçün uyğundur).
  • Böyük əməliyyatlarda məlumatların dəyişdirilməsi zamanı nadir gözlənilməz MDBX_PROBLEM xətası ilə özünü göstərən çirkli səhifələrin dağılması alqoritmində (dəyişik verilənlər bazası səhifələrinin seçmə çıxarılması) reqressiya aradan qaldırıldı.
  • Verilənlər bazasına qəsdən ziyan vurulması halında dayanıqlığı təmin etmək üçün bir sıra yoxlamaların əlavə edilməsi ilə mərhələli sınaq aparıldı.
  • Sabit kiçik xəbərdarlıqlar UndefinedBehaviorSanitizer və Coverity Scan problemləri.
  • Kitabxananın köhnə versiyaları tərəfindən yaradılan verilənlər bazası şəkillərinin içərisində iç içə daxil edilmiş səhifələrdə köhnəlmiş və artıq istifadə olunmayan “P_DIRTY” daxili bayrağın yoxlanılması düzəldildi.
  • CMake skriptlərində LTO (link-time optimization) üçün tələb olunan kompilyator komponentlərinin axtarışı təkmilləşdirilmişdir.
  • Sinxron oxuyucuların maksimum sayı 32767-ə çatdırılıb.
  • Valgrind və AddressSanitizer istifadə edərkən təkmilləşdirilmiş performans.
  • Windows-da MDBX_NOTLS rejimində işləyərkən SRW kilidinin rekursiv istifadəsi aradan qaldırıldı (meydanın yerli yaddaşından istifadə etmədən) sistem vaxtı dəyişdikdə bootid generasiyası düzəldildi, WSL1 və WSL2 aşkarlanması yaxşılaşdırıldı və DrvFS vasitəsilə quraşdırılmış Plan 9-da verilənlər bazası açmaq əlavə edildi.
  • Ümumilikdə, 160 faylda 57-dan çox dəyişiklik edildi, ~5000 sətir əlavə edildi, ~2500 silindi.

Xüsusilə Erigon layihə komandasına (Ethereum ekosistemi) ekstremal istifadə ssenarilərində sınaqdan keçirdikləri yardıma görə təşəkkür etmək istərdim. Əhəmiyyətli odur ki, libmdbx v0.10.0-ın buraxılmasından sonra beş ay ərzində hər bir Erigon quraşdırmasında 1-2 TB verilənlər bazası həcmi (Ethereum qovşaqlarının 7%-də istifadə olunur) verilənlər bazası korporasiyası ilə bağlı yalnız üç məlumat əldə edilib. proqram səhvləri deyil, xarici səbəblər səbəbindən baş verdi: iki halda səbəb RAM uğursuzluqları, üçüncüsü BTRFS istifadə edərək saxlama alt sisteminin müəyyən bir konfiqurasiyasında məlumatların sıfırlanmasında səhv idi.

Mənbə: opennet.ru

Добавить комментарий