Κυκλοφορία ενσωματωμένου 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, ισχυρή σειριοποίηση αλλαγών και αναγνώσεις χωρίς αποκλεισμό με γραμμική κλιμάκωση στους πυρήνες της CPU. Υποστηρίζεται η αυτόματη συμπύκνωση, η αυτόματη διαχείριση μεγέθους βάσης δεδομένων και η εκτίμηση ερωτήματος εύρους. Από το 2016, έργα χρηματοδοτούνται από την Positive Technologies και από το 2017 χρησιμοποιούνται στα προϊόντα της.

Το libmdbx προσφέρει ένα API C++, καθώς και συνδέσμους γλώσσας που υποστηρίζονται από ενθουσιώδεις για Rust, Haskell, Python, NodeJS, Ruby, Go και Nim. Για το libfpta, μόνο η περιγραφή του API είναι δημόσια διαθέσιμη με τη μορφή αρχείου κεφαλίδας C/C++.

Σημαντικές καινοτομίες, βελτιώσεις και διορθώσεις που προστέθηκαν από τα προηγούμενα νέα στις 9 Μαΐου:

  • Ενεργοποιεί αναπαραγώγιμες κατασκευές.
  • Διορθώθηκε ένα σφάλμα λόγω του οποίου, σε πολύ σπάνιες περιπτώσεις, θα μπορούσε να προκύψει βρόχος/πάγωμα κατά τη διάρκεια μιας δέσμευσης συναλλαγής. Το πρόβλημα εντοπίστηκε από ειδικούς της Positive Tecnologies κατά τη διάρκεια εσωτερικών δοκιμών των δικών τους προϊόντων.
  • Οι δοκιμές έχουν βελτιωθεί και τα σενάρια δοκιμών έχουν επεκταθεί για να ελεγχθούν όλες οι προσβάσιμες μη ισομορφικές καταστάσεις του δέντρου σελίδων και τα περιεχόμενα GC μέσα στη βάση δεδομένων.
  • Στο C++ API, έχει διορθωθεί ένα επιπλέον "noexcept", έχουν προστεθεί πρόσθετες υπερφορτώσεις για τη μέθοδο "cursor::erase()", η υλοποίηση των buffers έχει απαλλαγεί από τη χρήση του "std::string" για να διασφαλιστεί η ευθυγράμμιση (σχετικό για το CLANG libstdc++).
  • Μια παλινδρόμηση στον αλγόριθμο διαρροής βρώμικων σελίδων (επιλεκτική εξαγωγή αλλαγμένων σελίδων βάσης δεδομένων) που εκδηλώθηκε με ένα σπάνιο απροσδόκητο σφάλμα MDBX_PROBLEM κατά την αλλαγή δεδομένων σε τεράστιες συναλλαγές έχει εξαλειφθεί.
  • Πραγματοποιήθηκε σταδιακή δοκιμή με την προσθήκη ορισμένων ελέγχων για τη διασφάλιση της σταθερότητας σε περίπτωση σκόπιμης βλάβης στη βάση δεδομένων.
  • Διορθώθηκαν δευτερεύουσες προειδοποιήσεις ζητήματα UndefinedBehaviorSanitizer και Coverity Scan.
  • Διορθώθηκε ο έλεγχος της παλιάς και μη χρησιμοποιούμενης εσωτερικής επισήμανσης "P_DIRTY" σε ένθετες σελίδες μέσα σε εικόνες βάσης δεδομένων που δημιουργήθηκαν από παλαιότερες εκδόσεις της βιβλιοθήκης.
  • Στα σενάρια CMake, η αναζήτηση για στοιχεία μεταγλωττιστή που απαιτούνται για το LTO (link-time optimization) έχει βελτιωθεί.
  • Ο μέγιστος αριθμός ταυτόχρονων αναγνωστών έχει αυξηθεί σε 32767.
  • Βελτιωμένη απόδοση κατά τη χρήση του Valgrind και του AddressSanitizer.
  • Στα Windows, η επαναλαμβανόμενη χρήση του SRW-lock κατά την εργασία σε λειτουργία MDBX_NOTLS (χωρίς χρήση τοπικής αποθήκευσης νήματος) έχει εξαλειφθεί, η δημιουργία bootid έχει διορθωθεί εάν έχει αλλάξει η ώρα του συστήματος, η ανίχνευση WSL1 και WSL2 έχει βελτιωθεί και η δυνατότητα έχει προστεθεί άνοιγμα μιας βάσης δεδομένων στο Σχέδιο 9 που έχει προσαρτηθεί μέσω DrvFS.
  • Συνολικά, έγιναν περισσότερες από 160 αλλαγές σε 57 αρχεία, προστέθηκαν ~5000 γραμμές, ~2500 διαγράφηκαν.

Θα ήθελα να ευχαριστήσω ιδιαίτερα την ομάδα του έργου Erigon (Ethereum ecosystem) για τη βοήθειά τους στη δοκιμή σε σενάρια ακραίας χρήσης. Είναι σημαντικό ότι σε πέντε μήνες από την κυκλοφορία του libmdbx v0.10.0, με όγκο βάσης δεδομένων 1-2 TB σε κάθε εγκατάσταση Erigon (που χρησιμοποιείται στο 7% των κόμβων Ethereum), ελήφθησαν μόνο τρεις αναφορές καταστροφής της βάσης δεδομένων, όλες που προέκυψε για εξωτερικούς λόγους και όχι για σφάλματα λογισμικού: σε δύο περιπτώσεις η αιτία ήταν αποτυχίες RAM, στην τρίτη ένα σφάλμα κατά την επαναφορά δεδομένων σε μια συγκεκριμένη διαμόρφωση του υποσυστήματος αποθήκευσης χρησιμοποιώντας BTRFS.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο