Έκδοση του DBMS libmdbx 0.11.7. Μετακινήστε την ανάπτυξη στο GitFlic μετά το κλείδωμα στο GitHub

Η βιβλιοθήκη libmdbx 0.11.7 (MDBX) κυκλοφόρησε με την εφαρμογή μιας συμπαγούς ενσωματωμένης βάσης δεδομένων κλειδιού-τιμής υψηλής απόδοσης. Ο κώδικας libmdbx διανέμεται υπό τη δημόσια άδεια OpenLDAP. Υποστηρίζονται όλα τα τρέχοντα λειτουργικά συστήματα και αρχιτεκτονικές, καθώς και το ρωσικό Elbrus 2000.

Η κυκλοφορία είναι αξιοσημείωτη για τη μετεγκατάσταση του έργου στην υπηρεσία GitFlic αφού η διοίκηση GitHub αφαίρεσε το libmdbx μαζί με μια σειρά από άλλα έργα στις 15 Απριλίου 2022 χωρίς καμία προειδοποίηση ή εξήγηση, ενώ ταυτόχρονα απέκλεισε την πρόσβαση σε πολλούς προγραμματιστές που σχετίζονται με εταιρείες που έπεσαν υπό τις αμερικανικές κυρώσεις. Από την πλευρά του χρήστη, όλες οι σελίδες, το αποθετήριο και τα forks του έργου μετατράπηκαν ξαφνικά σε σελίδα "404", χωρίς δυνατότητα επικοινωνίας και μάθησης των λόγων.

Δυστυχώς έχουν χαθεί σχεδόν όλα τα θέματα, στα οποία υπήρξαν πολλές ερωτήσεις με αναλυτικές απαντήσεις, αλλά και πολλές συζητήσεις. Η απώλεια αυτών των πληροφοριών είναι η μόνη αντικειμενική ζημιά που κατάφερε να προκαλέσει στο έργο η διοίκηση του GitHub. Μερικά αντίγραφα των συζητήσεων παραμένουν διαθέσιμα στο αρχείο archive.org.

Η απώλεια των ενσωματωμένων σεναρίων CI και της υποδομής (διαθέσιμα για έργα OpenSource δωρεάν) μας ανάγκασε να κάνουμε αναθεώρηση, ενοποίηση και εξάλειψη ενός μικρού τεχνικού χρέους. Τώρα το CI έχει αποκατασταθεί σχεδόν στον ίδιο βαθμό, με εξαίρεση τις εκδόσεις και τις δοκιμαστικές εκτελέσεις για όλες τις παραλλαγές BSD και Solaris. Φυσικά, μετά τις ενέργειες του GitHub, δεν ελήφθησαν διευκρινίσεις ή ειδοποιήσεις, εκτός από μια υπενθύμιση για την ανάγκη πληρωμής και τις προσπάθειες διαγραφής χρημάτων.

Από τα τελευταία νέα σχετικά με την κυκλοφορία του libmdbx v0.11.3, εκτός από την ανάκτηση από ενέργειες GitHub, αξίζει να σημειωθούν οι ακόλουθες βελτιώσεις και διορθώσεις:

  • Προστέθηκε μια λύση για ένα ανιχνευμένο αποτέλεσμα ασυνέπειας/ελάττωμα στη συνδυασμένη σελίδα και στην προσωρινή μνήμη προσωρινής αποθήκευσης στον πυρήνα του Linux. Σε συστήματα όπου η κρυφή μνήμη σελίδων και προσωρινής μνήμης είναι πραγματικά ενοποιημένες, δεν έχει νόημα ο πυρήνας να σπαταλά τη μνήμη σε δύο αντίγραφα δεδομένων κατά την εγγραφή σε ένα αρχείο που έχει ήδη αντιστοιχιστεί στη μνήμη. Επομένως, τα δεδομένα που γράφονται γίνονται ορατά μέσω της αντιστοίχισης μνήμης πριν ολοκληρωθεί η κλήση συστήματος write(), ακόμα κι αν τα δεδομένα δεν έχουν γραφτεί ακόμη στο δίσκο.

    Συνολικά, άλλες συμπεριφορές δεν είναι ορθολογικές, επειδή με μια καθυστερημένη συγχώνευση, πρέπει ακόμα να πιάσετε κλειδώματα για λίστες σελίδων, να αντιγράψετε δεδομένα ή να προσαρμόσετε το PTE. Επομένως, ο άρρητος κανόνας της συνοχής ισχύει από το 1989, όταν εμφανίστηκε η ενοποιημένη προσωρινή μνήμη προσωρινής αποθήκευσης στο SRV4. Ως εκ τούτου, η εύρεση περίεργων αποτυχιών σε σενάρια παραγωγής libmdbx με μεγάλη κίνηση απαιτούσε πολλή δουλειά. Πρώτα, αναπαράγοντας το πρόβλημα, στη συνέχεια επαληθεύοντας υποθέσεις και ελέγχοντας τις βελτιώσεις.

    Τώρα μπορούμε να πούμε με βεβαιότητα ότι το πρόβλημα έχει εντοπιστεί αξιόπιστα, εντοπιστεί και εξαλειφθεί αξιόπιστα, παρά την πολυπλοκότητα και την ιδιαιτερότητα του σεναρίου αναπαραγωγής. Επιπλέον, το έργο του μηχανισμού παράκαμψης επιβεβαιώθηκε από έναν από τους προγραμματιστές του Erigon (Ethereum), στην περίπτωσή του, στην έκδοση εντοπισμού σφαλμάτων, η προστασία ενεργοποιήθηκε ως παλινδρόμηση λόγω ενός επιπλέον ελέγχου επιβεβαίωσης.

    Θα πρέπει να σημειωθεί ότι στο πλαίσιο της ευρείας χρήσης του libmdbx σε έργα εργασίας, είναι θεμελιωδώς πιο σημαντικό να διασφαλιστεί η αξιόπιστη λειτουργία, αντί να διαπιστωθεί "είναι αυτό ένα σφάλμα ή ένα χαρακτηριστικό" και εάν μπορεί να βασιστεί κανείς σε αυτή τη συνοχή, ειδικά να μην βρίσκουμε τα αίτια της ασυνέπειας μέσα στον πυρήνα του Linux. Επομένως, εδώ μιλάμε για την επίλυση ενός προβλήματος που θα μπορούσε να επηρεάσει τους χρήστες.

  • Διορθώθηκε μια παλινδρόμηση του σφάλματος EXDEV (Σύνδεσμος μεταξύ συσκευών) κατά τη γρήγορη αντιγραφή μιας βάσης δεδομένων χωρίς συμπύκνωση σε άλλο σύστημα αρχείων, τόσο μέσω του API όσο και μέσω του βοηθητικού προγράμματος mdbx_copy.
  • Ο Kris Zyp έχει εφαρμόσει υποστήριξη για το libmdbx στο Deno. Ο Kai Wetlesen έχει συσκευάσει RPM για το Fedora. Ο David Bouyssié εφάρμοσε δεσμεύσεις για τη Scala.
  • Διορθώθηκε η επεξεργασία της τιμής που ορίστηκε από την επιλογή MDBX_opt_rp_augment_limit κατά την επεξεργασία τεράστιων συναλλαγών σε μεγάλες βάσεις δεδομένων. Προηγουμένως, λόγω σφάλματος, μπορούσαν να πραγματοποιηθούν περιττές ενέργειες, οι οποίες μερικές φορές επηρέαζαν την απόδοση σε υλοποιήσεις Ethereum (Erigon/Akula/Silkworm) και έργα Binance Chain.
  • Πολλά σφάλματα έχουν διορθωθεί, συμπεριλαμβανομένων αυτών στο C++ API. Διορθώθηκαν πολλά προβλήματα κατασκευής σε σπάνιες και εξωτικές διαμορφώσεις. Μια πλήρης λίστα με όλες τις σημαντικές βελτιώσεις είναι διαθέσιμη στο ChangeLog.
  • Έγιναν συνολικά 185 αλλαγές σε 89 αρχεία, προστέθηκαν ≈3300 γραμμές, ≈4100 διαγράφηκαν. Καταργήθηκε περισσότερο κυρίως λόγω εκκαθάρισης ήδη άχρηστων αρχείων τεχνολογίας που σχετίζονται με το GitHub και τις εξαρτημένες υπηρεσίες.

Ιστορικά, το libmdbx είναι ένας βαθύς επανασχεδιασμός του LMDB DBMS και ξεπερνά τον πρόγονό του όσον αφορά την αξιοπιστία, το σύνολο χαρακτηριστικών και την απόδοση. Σε σύγκριση με το LMDB, το libmdbx δίνει μεγάλη έμφαση στην ποιότητα του κώδικα, τη σταθερότητα του API, τις δοκιμές και τους αυτοματοποιημένους ελέγχους. Ένα βοηθητικό πρόγραμμα για τον έλεγχο της ακεραιότητας της δομής της βάσης δεδομένων παρέχεται με ορισμένες επιλογές ανάκτησης.

Τεχνολογικά, το libmdbx προσφέρει ACID, αυστηρή σειριοποίηση αλλαγών και αναγνώσεις χωρίς αποκλεισμό με γραμμική κλιμάκωση στους πυρήνες της CPU. Υποστηρίζεται η αυτόματη συμπύκνωση, η αυτόματη διαχείριση μεγέθους βάσης δεδομένων και η εκτίμηση ερωτήματος εύρους. Από το 2016, το έργο χρηματοδοτείται από την Positive Technologies και χρησιμοποιείται στα προϊόντα της από το 2017.

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

Πηγή: opennet.ru

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