libmdbx 0.13.1 (MDBX) kitabxanasının nəşri yayımlandı. Bu kitabxana açar-dəyər sinifinin yüksək məhsuldar, kompakt və yerləşdirilən verilənlər bazasını təqdim edir. libmdbx daxilində kod Apache 2.0 lisenziyası altında yayılır. Bütün müasir əməliyyat sistemləri və arxitekturalar, həmçinin Rusiya Elbrus 2000 dəstəklənir. libmdbx üçün C++ üçün geniş API və habelə Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala dillərinə dəstəklənən bir çox əlavələr təklif edilir.
Tarixən, libmdbx DBMS LMDB-nin genişlənmiş versiyasıdır və öz əvvəlcəsinə nisbətən etibarlılıq, imkanlar və performans baxımından üstündür. LMDB ilə müqayisədə, libmdbx-də kodun keyfiyyətinə, API-nin sabit çalışmasına, test edilməsinə və avtomatik yoxlamalara böyük diqqət verilir. Verilənlər bazasının strukturu üzrə bütövlüyün yoxlanılması üçün bir vasitə təqdim edilir, bəzı bərpa imkanları ilə birlikdə. Texnoloji cəhətdən libmdbx ACID, sərt dəyişiklik serilasiyası və CPU nüvələrinə xətti ölçülə bilən qeyri-bloklu oxumağı təklif edir. Avtomatik kompaktlaşdırma, verilənlər bazasının ölçüsünün avtomatik idarə olunması, aralıqlara (range) əsaslanan nümunələrin həcminin qiymətləndirməsi dəstəklənir.
Əsas dəyişikliklər:
- Kodun lisenziyasının OpenLDAP İctimai Lisenziyasından Apache 2.0-ya dəyişdirilməsi.
- Kursör API-nin daha rahat və aydın mövqeləşdirmə əməliyyatları ilə genişləndirilməsi, həm açarlar, həm də açar-dəyər cütləri üçün <, =, > şəraitləri ilə analoji olaraq. Kursörlərin çevik idarəsi üçün mdbx_cursor_unbind() və mdbx_txn_release_all_cursors() funksiyaları əlavə edilmişdir, bu da təkrar istifadəyə imkan tanıyan ssenarilərdə xərcləri azaltmağa kömək edir. mdbx_cursor_scan() və mdbx_cursor_scan_from() funksiyaları, funksional predikat istifadə edərək cədvəlləri skan etmək üçün əlavə edilmişdir, bununla yanaşı, münasib xərcləri azaltmağa kömək edir.
- Kursörlərin yenidən işlənməsi, davranışın birləşdirilməsi, kodun daha müntəzəm hala gətirilməsi, dalğalanma və maşın əməliyyatlarının sayını azaltmaq üçün.
- mdbx_chk utilitinin funksionallığının mdbx_env_chk() funksiyası şəklində kitabxanaya köçürülməsi, verilənlər bazasının strukturunun bütövlüyünün yoxlanması üçün, o cümlədən tətbiq loqikasını da əhatə etmək.
- MDBX_opt_gc_time_limit seçimi, GC-də bitişik boş səhifələrin axtarılmasına sərf olunan zamanın daha elastik idarə edilməsi üçün.
- Bir çox DBI tutucuları olan ssenarilərdə tranzaksiyaların başladılması zamanı xərclərin əhəmiyyətli dərəcədə azaldılması, köməkçi cədvəl elementlərinin gecikdirilmiş/lazım gəldikdə işə salınması ilə. Həmçinin, MDBX_ENABLE_DBI_SPARSE yığma seçimi ilə idarə olunan nadir DBI simgələrinin dəstəyi mexanizmi, standart olaraq aktivdir.
- DBI simgələrinin açılması zamanı xərclərin azaldılması. Həmçinin, MDBX_ENABLE_DBI_LOCKFREE yığma seçimi ilə idarə olunan, bloklamalar istifadə etmədən sürətli açılışın dəstəklənməsi və gecikdirilmiş azad edilmə mexanizmi.
- Oxuyan tranzaksiyaların “parklama” dəstəyi, köhnə MVCC görüntülərinin yenidən işlənməsi məqsədilə onların sıxışdırılması və zibilin təkrar işlənməsindən yaranan problemlərin qarşısının alınması. Parklanma və sıxışdırma mexanizmi, həmçinin Handle-Slow-Readers geri çağırışına sadə alternativdir. Rahatlıq üçün, mdbx_txn_park() və mdbx_txn_unpark() funksiyalarının əlavə arqumentləri var ki, bunlar parklanan və sıxışdırılan tranzaksiyaların avtomatik “parkdan çıxarılması” və yenidən işə salınmasını tələb etsin. mdbx_copy utilitəsinə müvafiq -d və -p seçimləri əlavə olunmuşdur.
- MDBX mühitinin açıq iş mühitini, prosesin bölünməsindən sonra mdbx_env_resurrect_after_fork() vasitəsilə yenidən bərpa edilməsi üçün dəstək.
- mdbx_dbi_rename() və mdbx_dbi_rename2() vasitəsilə cədvəllərin adlarını dəyişdirmək üçün dəstək. İstifadəçi cədvəlləri haqqında məlumat əldə etmək üçün mdbx_enumerate_tables() funksiyası əlavə edilib.
- MDBX_NOSTICKYTHREADS rejimi, sistemin əməliyyat sistemi axınları ilə birlikdə çoxlü axınların inteqrasiyasını asanlaşdırmaq üçün MDBX_NOTLS yerinə istifadə edilməkdədir.
- MDBX_envinfo strukturunda mi_dxbid sahəsində əldə edilə bilən UUID əlavə edilib. mdbx_env_info_ex() vasitəsilə məlumat əldə etməyə imkan tanıyaraq, verilənlər bazasını açmadan məlumatı əldə etməyə imkan verən mdbx_preopen_snapinfo() funksiyası həyata keçirilib.
- Digər proqramlaşdırma dilləri ilə loglama istifadəni əhəmiyyətli dərəcədə asanlaşdıran, vprintf() funksionallığı olmadan geri çağırma loglama funksiyalarını dəstəkləyir.
- API-yə mdbx_txn_copy2pathname() və mdbx_txn_copy2fd() funksiyaları əlavə edilib.
- Mənbə kodunun yenidən strukturlaşdırılması və refaktorizasiya edilməsi.
- «Cədvəl» terminindən «subDb» yerinə istifadə olunması.
- MDBX_COALESCE və MDBX_NOTLS seçimləri köhnəlmiş elan edilir. MDBX_USE_VALGRIND-bağlı toplama seçimi, standart ENABLE_MEMCHECK ilə əvəz olunur.
Mənbə: opennet.ru
