Δεύτερη υποψήφια έκδοση libmdbx v1.0 μετά από πέντε χρόνια ανάπτυξης.

Βιβλιοθήκη libmdbx είναι ένας σημαντικά επανασχεδιασμένος απόγονος του LMDB - μια εξαιρετικά υψηλής απόδοσης, συμπαγής ενσωματωμένη βάση δεδομένων κλειδιού-τιμής.
Η τρέχουσα έκδοση v0.5 είναι μια τεχνική έκδοση, σηματοδοτεί την ολοκλήρωση τυχόν βελτιώσεων και τη μετάβαση στη φάση της δημόσιας τελικής δοκιμής και σταθεροποίησης, με τον επακόλουθο σχηματισμό της πρώτης πλήρους έκδοσης της βιβλιοθήκης.

LMDB είναι ένα αρκετά γνωστό ενσωματωμένο συναλλακτικό DBMS κλειδιού-τιμής που βασίζεται σε δέντρο Β+ χωρίς προληπτική καταγραφή, το οποίο επιτρέπει σε ένα σμήνος διαδικασιών πολλαπλών νημάτων να λειτουργούν ανταγωνιστικά και εξαιρετικά αποτελεσματικά με μια τοπικά κοινόχρηστη (όχι δικτυακή) βάση δεδομένων. Με τη σειρά του, το MDBX είναι ταχύτερο και πιο αξιόπιστο από το LMDB, ενώ το libmdbx διατηρεί όλα τα βασικά χαρακτηριστικά του προγόνου του, όπως π.χ. ΟΞΥ και χωρίς αποκλεισμό διαβάζει με γραμμική κλιμάκωση στους πυρήνες της CPU, και προσθέτει επίσης αρκετούς νέους.

Μια περιγραφή των διαφορών και των βελτιώσεων του libmdbx σε σχέση με το LMDB αξίζει ένα ξεχωριστό άρθρο (προγραμματίζεται να δημοσιευτεί στο Habré and Medium). Εδώ είναι σκόπιμο να αναφέρουμε τα πιο σημαντικά και αξιοσημείωτα:

  • Βασικά, δίνεται μεγαλύτερη προσοχή στην ποιότητα του κώδικα, τη δοκιμή και τους αυτόματους ελέγχους.
  • Σημαντικά περισσότερος έλεγχος κατά τη λειτουργία, από τον έλεγχο των παραμέτρων έως τον εσωτερικό έλεγχο των δομών της βάσης δεδομένων.
  • Αυτόματη συμπύκνωση και αυτόματη διαχείριση μεγέθους βάσης δεδομένων.
  • Μια ενιαία μορφή βάσης δεδομένων για συγκροτήματα 32-bit και 64-bit.
  • Εκτίμηση μεγέθους δείγματος κατά εύρη (εκτίμηση ερωτήματος εύρους).
  • Υποστήριξη για κλειδιά διπλάσια από τηγανίτες και μέγεθος σελίδας βάσης δεδομένων που μπορεί να επιλέξει ο χρήστης.

Η υποψήφια έκδοση libmdbx είναι το αποτέλεσμα της απόφασης (δείτε παρακάτω) να διαχωριστούν τα έργα MDBX και MithrilDB τον Αύγουστο του 2019. Ταυτόχρονα, η libmdbx αποφάσισε να εξαλείψει το (λογικό) μέγιστο τεχνικό χρέος και να σταθεροποιήσει τη βιβλιοθήκη. Στην πραγματικότητα, έχουν γίνει 2-3 φορές περισσότερα προς την καθορισμένη κατεύθυνση από ό,τι είχε αρχικά υπολογιστεί και προγραμματιστεί:

  • Έχει υλοποιηθεί υποστήριξη για Mac OS και πλατφόρμες δεύτερου επιπέδου: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Μπορεί να προστεθεί υποστήριξη AIX και HP-UX όπως απαιτείται.
  • Ο κώδικας απολυμάνθηκε χρησιμοποιώντας Undefined Behavior Sanitizer και Address Sanitizer, όλες οι προειδοποιήσεις κατά την κατασκευή με -Wpedantic, όλες οι προειδοποιήσεις Coverity Static Analyzer κ.λπ. εξαλείφθηκαν.
  • Εκσυγχρονίζω Περιγραφές API.
  • Συγχώνευση πηγαίου κώδικα για ευκολία ενσωμάτωσης.
  • Υποστήριξη CMake.
  • Υποστήριξη για ένθετες συναλλαγές.
  • Χρησιμοποιώντας το bootid για να προσδιορίσετε εάν το λειτουργικό σύστημα έχει επανεκκινηθεί (βρώμικη διακοπή βάσης δεδομένων).
  • Καταμέτρηση από άκρο σε άκρο ενημερωμένων/παλαιών σελίδων και εκτεταμένων πληροφοριών συναλλαγών.
  • Επιλογή MDBX_ACCEDE για σύνδεση σε μια ήδη ανοιχτή βάση δεδομένων σε συμβατή λειτουργία.
  • Χρήση Μπλοκάρισμα OFD Όταν είναι διαθέσιμο.
  • Καυτό αντίγραφο ασφαλείας στο σωλήνα.
  • Εξειδικευμένος βελτιστοποιημένος αλγόριθμος εσωτερικής ταξινόμησης (έως και 2-3 φορές ταχύτερος από το qsort() και έως και 30% ταχύτερος από τον std::sort()).
  • Το μέγιστο μήκος του κλειδιού έχει αυξηθεί.
  • Αυτόματος έλεγχος ανάγνωσης εκ των προτέρων (στρατηγική αποθήκευσης αρχείων βάσης δεδομένων στη μνήμη).
  • Πιο επιθετική και ταχύτερη αυτόματη συμπύκνωση.
  • Μια πιο βέλτιστη στρατηγική για τη συγχώνευση σελίδων δέντρων B+.
  • Έλεγχος μη τοπικών συστημάτων αρχείων (NFS, Samba κ.λπ.) για την αποφυγή βλάβης της βάσης δεδομένων σε περίπτωση εσφαλμένης χρήσης.
  • Το σύνολο των δοκιμών έχει επεκταθεί.

Η ανάπτυξη της «επόμενης» έκδοσης του libmdbx θα συνεχιστεί ως ξεχωριστό έργο MithrilDB, ενώ ο φορέας ανάπτυξης της «τρέχουσας» έκδοσης του MDBX στοχεύει στο πάγωμα του συνόλου χαρακτηριστικών και στη σταθεροποίησή του. Η απόφαση αυτή ελήφθη για τρεις λόγους:

  • Εντελώς ασύμβατο: Το MithrilDB απαιτεί διαφορετική (μη συμβατή) μορφή αρχείου βάσης δεδομένων και διαφορετικό (μη συμβατό) API για την υλοποίηση όλων των προγραμματισμένων λειτουργιών.
  • Νέος πηγαίος κώδικας: Ο πηγαίος κώδικας MithrilDB έχει λάβει άδεια ανεξάρτητα από το LMDB και το ίδιο το έργο σχεδιάζεται να δημοσιευτεί με διαφορετική άδεια (εγκεκριμένη από Ή ΕΑΝ άδεια Apache 2.0αλλά όχι OpenLDAP Foundation).
  • Ο διαχωρισμός αποφεύγει πιθανή σύγχυση, παρέχει περισσότερη βεβαιότητα και διασφαλίζει ότι τα έργα έχουν μια ανεξάρτητη πορεία προς τα εμπρός.

Το MithrilDB, όπως και το MDBX, βασίζεται επίσης σε δέντρο Β+ και θα διαθέτει επίσης εξαιρετικά υψηλή απόδοση, ενώ εξαλείφει μια σειρά από θεμελιώδη μειονεκτήματα των MDBX και LMDB. Συγκεκριμένα, θα εξαλειφθεί το πρόβλημα των «μακροχρόνιων αναγνώσεων», το οποίο εκδηλώνεται ως «διόγκωση» της βάσης δεδομένων λόγω του γεγονότος ότι η επεξεργασία σκουπιδιών εμποδίζεται από συναλλαγές μακράς ανάγνωσης. Τα νέα χαρακτηριστικά του MithrilDB περιλαμβάνουν:

  • υποστήριξη για την τοποθέτηση της βάσης δεδομένων σε πολλά ετερογενή μέσα: HDD, SSD και μη πτητική μνήμη.
  • βέλτιστες στρατηγικές για δεδομένα "πολύτιμης" και "χαμηλής αξίας", για "ζεστά", "ζεστά" και "κρύα" δεδομένα.
  • χρησιμοποιώντας το δέντρο Merkle για την παρακολούθηση της ακεραιότητας της βάσης δεδομένων.
  • προαιρετική χρήση του WAL και σημαντικά υψηλότερη απόδοση σε σενάρια έντασης εγγραφής και εγγυήσεις ακεραιότητας δεδομένων.
  • Τεμπέλης επισκευή δεδομένων σε δίσκους.

Πηγή: linux.org.ru

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