
libmdbx हा एक अत्यंत वेगवान, संक्षिप्त, शक्तिशाली, एकात्मिक, आणि परवानाकृत व्यवहारात्मक की-व्हॅल्यू डेटाबेस आहे.
द libmdbx 0.12.3 च्या नवीन आवृत्तीचे प्रकाशन (MDBX) कॉम्पॅक्ट, उच्च-कार्यक्षमता एम्बेडेड की-व्हॅल्यू डेटाबेसची अंमलबजावणी.
libmdbx आहे LMDB DBMS ची सखोल पुनर्रचना आणि विश्वासार्हतेच्या बाबतीत त्याच्या पूर्ववर्तीला मागे टाकले, वैशिष्ट्य संच आणि कार्यप्रदर्शन. LMDB च्या तुलनेत, libmdbx कोड गुणवत्ता, API स्थिरता, चाचणी आणि स्वयं-तपासणीवर खूप भर देते.
Libmdbx 0.12.3 ची मुख्य नवीन वैशिष्ट्ये
या नवीन आवृत्तीत आम्हाला ते सापडेल डिस्कवर समवर्ती लेखन आणि लेखन दरम्यान डायनॅमिक निवड लागू केली सामान्य त्यानंतर fdatasync(), पर्यायाद्वारे नियंत्रित MDBX_opt_writethrough_threshold. टिकाऊ मोडमध्ये, डेटा दोन प्रकारे डिस्कवर फ्लश केला जाऊ शकतो: O_DSYNC सह उघडलेल्या फाईल डिस्क्रिप्टरद्वारे समवर्ती लेखन, आणि सामान्य लेखन त्यानंतर fdatasync().
पहिली पद्धत थोड्या संख्येने पृष्ठे लिहिताना ते अधिक सोयीचे असते आणि/किंवा डिस्क/मीडियासह संप्रेषण चॅनेलला शून्याच्या जवळ विलंब असल्यास. जर तुम्हाला बरीच पृष्ठे लिहायची असतील आणि/किंवा परस्परसंवाद चॅनेलला लक्षणीय विलंब झाला असेल (डेटा केंद्रे, ढग) दुसरी पद्धत सोयीस्कर आहे. जोडलेला MDBX_opt_writethrough_threshold पर्याय तुम्हाला व्हॉल्यूम आणि विशिष्ट वापर परिस्थितीवर आधारित लेखन पद्धत डायनॅमिकपणे निवडण्यासाठी रनटाइममध्ये थ्रेशोल्ड सेट करण्याची परवानगी देतो.
अजून एक बदल म्हणजे तो म्हणजे MDBX_MMAP_USE_MS_ASYNC संकलित पर्याय जोडला जे तुम्हाला msync(MS_ASYNC) सिस्टीम कॉलचा वापर अक्षम करण्यास अनुमती देते, ज्याची सध्याच्या बहुतांश ऑपरेटिंग सिस्टमवर आवश्यकता नाही.
त्याशिवाय MDBX_MMAP_USE_MS_ASYNC=0 वर डीफॉल्ट(अक्षम) युनिफाइड पेज कॅशेसह लिनक्स आणि इतर सिस्टमवर. हे वर्तन (msync(MS_ASYNC) न वापरता) हार्ड-कोडेड LMDB लॉजिकशी संबंधित आहे. परिणामी, साध्या/निरागस बेंचमार्कमध्ये, libmdbx प्रत्यक्ष वापराप्रमाणेच LMDB ला मागे टाकते.
फक्त बाबतीत, हे लक्षात ठेवण्यासारखे/लक्षात ठेवण्यासारखे आहे की Windows वर, libmdbx अनेक लहान व्यवहारांसह परिस्थितींमध्ये LMDB च्या मागे राहणे अपेक्षित आहे, कारण libmdbx विंडोजवर जाणूनबुजून फाईल लॉक वापरते, जे धीमे (खराबपणे अंमलात आणलेले) कर्नलमध्ये आहेत. ऑपरेटिंग सिस्टम), परंतु आपल्याला वापरकर्त्यांना मोठ्या संख्येने चुकीच्या कृतींपासून संरक्षण करण्याची परवानगी देते ज्यामुळे डेटाबेस भ्रष्टाचार होतो.
MDBX_WRITEMAP वाटप/पुनर्वापर मोडमध्ये, पृष्ठे पृष्ठ दोष निर्माण करतात आणि पृष्ठ सामग्रीची आवश्यकता नसली तरीही (ते अधिलिखित केले जाईल) डिस्कवरून पृष्ठ वाचले जाते. हे व्हर्च्युअल मेमरी उपप्रणालीच्या कार्याचा परिणाम आहे, आणि उपचाराची नियमित MADV_REMOVE पद्धत सर्व फाइल सिस्टमवर कार्य करत नाही आणि परिणामी बचतीपेक्षा बरेचदा महाग असते.
या व्यतिरिक्त, हे देखील लक्षात घेण्यासारखे आहे libmdbx आता अशा पानांचे "लिहा-पुढे" वापरते, जे युनिफाइड पेज कॅशे असलेल्या सिस्टम्सवर डेटाला "पुश" करण्यास कारणीभूत ठरते, मेमरीमधून त्या पृष्ठावर प्रवेश करताना डिस्कवरून वाचण्याची आवश्यकता दूर करते. नवीन कार्यक्षमता RAM मधील रीड-अहेड आणि पृष्ठ-उपस्थिती-स्टेट कॅशेच्या स्वयंचलित हाताळणीसह, mincore() द्वारे कार्य करते.
वाचन आणि लेखन वाटपासाठी पृष्ठे वाटप करताना लिहा-आधी-नापास लागू करण्यात आल्याचा उल्लेख आहे. यामुळे सिस्टीमच्या खर्चात एकापेक्षा जास्त कपात होते आणि संबंधित वापराच्या प्रकरणांमध्ये कामगिरीमध्ये लक्षणीय वाढ होते, जेव्हा: डेटाबेसचा आकार आणि डेटाचे प्रमाण RAM पेक्षा लक्षणीयरीत्या मोठे असते; MDBX_WRITEMAP मोड वापरला आहे; गैर-लहान व्यवहार (व्यवहारादरम्यान अनेक शेकडो किंवा हजारो पृष्ठे वाटप केली जातात).
इतर बदलांपैकी बाहेर उभे रहा:
- वैकल्पिक नावांसह LCK फायलींच्या अनुपस्थितीसाठी नियंत्रण जोडले.
- page_alloc_slowpath() मध्ये GC रेकॉर्डच्या स्वयंचलित विलीनीकरणासाठी सुधारित समर्थन.
- GC शोधण्यासाठी एकच कर्सर समाविष्ट केला. GC पेजिंगशी संबंधित अंतर्गत ध्वज सुधारित केले.
- बिगफूट सक्षम असलेल्या GC अपडेट करण्यापूर्वी आरक्षणाची सुधारित तयारी.
- नॉन-ओव्हरलॅपिंग विलीन केलेल्या सूचींच्या प्रकरणांसाठी pnl_merge() चा वापर ऑप्टिमाइझ केला.
- dpl_append() मधील पृष्ठांच्या ऑर्डर केलेल्या सूचीसाठी ऑप्टिमाइझ केलेले समर्थन.
- @MAIN वर वापरकर्ता इनपुटवर प्रक्रिया करताना mdbx_chk ची कामगिरी सुधारली.
- सुधारित LRU खुणा
- ओव्हरहेड कमी करण्यासाठी युनिफाइड पृष्ठ कॅशे "विसंगतता" नियंत्रण पुन्हा डिझाइन केले.
- डेटाबेसच्या आकारावर अवलंबून MDBX_opt_rp_augment_limit स्वयंचलित स्थापना प्रदान केली आहे.
- प्री-फॉल्ट लेखन सक्षम/अक्षम करण्यासाठी सक्ती करण्यासाठी MDBX_opt_prefault_write_enable पर्याय जोडला.
- subDb साठी न छापण्यायोग्य नावांसाठी समर्थन जोडले.
FOO विरुद्ध "रिलोकेशन R_X86_64_TPOFF32" चे निराकरण करण्यासाठी स्पष्ट tls_model("लोकल-डायनॅमिक") पर्याय जोडला -सामायिक केलेल्या समस्येमुळे क्लॅंगमधील बगमुळे चुकीचा ls_model मोड वापरला गेला.
शेवटी, आपल्याला त्याबद्दल अधिक जाणून घेण्यात स्वारस्य असल्यास, आपण तपशील तपासू शकता पुढील लिंकवर.