Η βιβλιοθήκη libmdbx 0.11.3 (MDBX) έχει κυκλοφορήσει, υλοποιώντας μια συμπαγή ενσωματωμένη βάση δεδομένων κλειδιών-τιμών υψηλής απόδοσης. Ο κώδικας libmdbx διανέμεται με την Άδεια Δημόσιας Χρήσης OpenLDAP. Υποστηρίζονται όλα τα τρέχοντα λειτουργικά συστήματα και αρχιτεκτονικές, καθώς και το ρωσικό Elbrus 2000. Στο τέλος του 2021, το libmdbx χρησιμοποιείται ως backend αποθήκευσης στους δύο ταχύτερους πελάτες Ethereum - το Erigon και το νέο "Shark", το οποίο, σύμφωνα με τις διαθέσιμες πληροφορίες, είναι ο πελάτης Ethereum με την υψηλότερη απόδοση.
Ιστορικά, το libmdbx είναι μια εις βάθος αναδιαμόρφωση του LMDB DBMS και ξεπερνά τον πρόγονό του σε αξιοπιστία, σύνολο χαρακτηριστικών και απόδοση. Σε σύγκριση με το LMDB, το libmdbx δίνει μεγάλη έμφαση στην ποιότητα του κώδικα, τη σταθερότητα του API, τις δοκιμές και τους αυτοματοποιημένους ελέγχους. Παρέχεται ένα βοηθητικό πρόγραμμα για τον έλεγχο της ακεραιότητας της δομής της βάσης δεδομένων με ορισμένες δυνατότητες ανάκτησης.
Τεχνολογικά, το libmdbx προσφέρει ACID, αυστηρή σειριοποίηση αλλαγών και ανάγνωση χωρίς αποκλεισμούς με γραμμική κλιμάκωση σε όλους τους πυρήνες της CPU. Υποστηρίζονται η αυτόματη συμπύκνωση, η αυτόματη διαχείριση μεγέθους βάσης δεδομένων και η εκτίμηση ερωτημάτων εύρους. Από το 2016, το έργο χρηματοδοτείται από την Positive Technologies και χρησιμοποιείται στα προϊόντα της από το 2017.
Το libmdbx προσφέρει ένα C++ API, καθώς και συνδέσεις που υποστηρίζονται από την κοινότητα σε Rust, Haskell, Python, NodeJS, Ruby, Go, Nim.
Οι κύριες καινοτομίες, βελτιώσεις και διορθώσεις που προστέθηκαν μετά τα προηγούμενα νέα από τις 11 Οκτωβρίου:
- Το C++ API θεωρείται έτοιμο για χρήση.
- Η ενημέρωση δεδομένων GC κατά τη διεξαγωγή τεράστιων συναλλαγών έχει επιταχυνθεί σημαντικά, κάτι που είναι ιδιαίτερα σημαντικό όταν χρησιμοποιείτε το libmdbx στο οικοσύστημα Ethereum.
- Η εσωτερική υπογραφή της μορφής βάσης δεδομένων έχει αλλάξει ώστε να υποστηρίζει την αυτόματη ενημέρωση, η οποία είναι απολύτως διαφανής για τους χρήστες. Αυτό εξαλείφει τα ψευδώς θετικά μηνύματα σχετικά με την καταστροφή της βάσης δεδομένων όταν χρησιμοποιούνται παρωχημένες εκδόσεις της βιβλιοθήκης για την ανάγνωση συναλλαγών που έχουν διαπραχθεί από τρέχουσες εκδόσεις.
- Προστέθηκαν οι συναρτήσεις mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() και mdbx_env_get_syncbytes(). Προστέθηκε υποστήριξη για τη λειτουργία MDBX_SET_UPPERBOUND.
- Όλες οι προειδοποιήσεις έχουν εξαλειφθεί κατά την κατασκευή με όλους τους υποστηριζόμενους μεταγλωττιστές σε λειτουργίες C++ 11/14/17/20. Έχει διασφαλιστεί η συμβατότητα με παλαιότερους μεταγλωττιστές: clang από την έκδοση 3.9, gcc από την έκδοση 4.8, συμπεριλαμβανομένης της κατασκευής με cdevtoolset-9 για CentOS/RHEL 7.
- Διορθώθηκε η πιθανότητα διένεξης μετα-σελίδων μετά τη μη αυτόματη εναλλαγή σε μια συγκεκριμένη μετα-σελίδα χρησιμοποιώντας το βοηθητικό πρόγραμμα mdbx_chk.
- Διορθώθηκε το απροσδόκητο σφάλμα MDBX_PROBLEM που επιστράφηκε κατά την επανεγγραφή παλιών μετα-σελίδων.
- Διορθώθηκε η επιστροφή MDBX_NOTFOUND σε περίπτωση ανακριβούς αντιστοίχισης κατά την επεξεργασία του αιτήματος MDBX_GET_BOTH.
- Διορθώθηκε το σφάλμα μεταγλώττισης στο Linux ελλείψει αρχείων κεφαλίδας που περιγράφουν διεπαφές με τον πυρήνα.
- Διορθώθηκε μια σύγκρουση μεταξύ της εσωτερικής σημαίας MDBX_SHRINK_ALLOWED και της επιλογής MDBX_ACCEDE.
- Αρκετοί περιττοί έλεγχοι βεβαιώσεων έχουν αφαιρεθεί.
- Διορθώθηκε η μη αναμενόμενη επιστροφή του MDBX_RESULT_TRUE από τη συνάρτηση mdbx_env_set_option().
- Συνολικά, έγιναν περισσότερες από 90 αλλαγές σε 25 αρχεία, προστέθηκαν ~1300 γραμμές, ~600 διαγράφηκαν.
Πηγή: opennet.ru
