అధిక-పనితీరు గల కాంపాక్ట్ ఎంబెడెడ్ కీ-విలువ డేటాబేస్ను అమలు చేస్తూ, libmdbx 0.13.3 (MDBX) విడుదల ప్రచురించబడింది. libmdbx కోడ్ Apache 2.0 లైసెన్స్ క్రింద పంపిణీ చేయబడింది. అన్ని ప్రస్తుత ఆపరేటింగ్ సిస్టమ్లు మరియు ఆర్కిటెక్చర్లకు మద్దతు ఉంది, అలాగే రష్యన్ ఎల్బ్రస్ 2000. libmdbx C++ కోసం అభివృద్ధి చెందిన APIని అందిస్తుంది, అలాగే రస్ట్, హాస్కెల్, పైథాన్, నోడ్జేఎస్, రూబీ, గో, నిమ్ భాషలకు ఔత్సాహికుల మద్దతు గల బైండింగ్లను అందిస్తుంది. , డెనో, స్కాలా.
చారిత్రాత్మకంగా, libmdbx అనేది LMDB DBMS యొక్క లోతైన పునర్నిర్మాణం మరియు విశ్వసనీయత, ఫీచర్ సెట్ మరియు పనితీరులో దాని పూర్వీకుల కంటే మెరుగైనది. LMDBతో పోలిస్తే, libmdbx కోడ్ నాణ్యత, API స్థిరత్వం, పరీక్ష మరియు స్వయంచాలక తనిఖీలపై చాలా ప్రాధాన్యతనిస్తుంది. కొన్ని రికవరీ సామర్థ్యాలతో డేటాబేస్ నిర్మాణం యొక్క సమగ్రతను తనిఖీ చేయడానికి ఒక యుటిలిటీ సరఫరా చేయబడింది. సాంకేతికత వారీగా, libmdbx CPU కోర్ల అంతటా లీనియర్ స్కేలింగ్తో ACID, బలమైన మార్పు సీరియలైజేషన్ మరియు నాన్-బ్లాకింగ్ రీడ్లను అందిస్తుంది. ఆటో-కాంపాక్టిఫికేషన్, ఆటోమేటిక్ డేటాబేస్ సైజ్ మేనేజ్మెంట్ మరియు రేంజ్ క్వెరీ అంచనాకు మద్దతు ఉంది.
ప్రధాన మార్పులు:
- 0.13.x శాఖ స్థిరమైన స్థితిని పొందింది. 0.14.x శాఖ అభివృద్ధి ప్రారంభమైంది.
- mdbx_cursor_count_ex() ఫంక్షన్ C APIకి జోడించబడింది, ఇది ప్రస్తుత కీకి సంబంధించిన బహుళ-విలువల సంఖ్య మరియు ఈ విలువలను నిల్వ చేసే సమూహ చెట్టు గురించిన సమాచారం రెండింటినీ పొందడానికి మిమ్మల్ని అనుమతిస్తుంది.
- mdbx::txn::make_broken() పద్ధతి, mdbx_txn_break() మాదిరిగానే C++ APIకి జోడించబడింది.
- mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat యుటిలిటీలు libmdbx నుండి లోపాలు, హెచ్చరికలు మరియు ముఖ్యమైన సందేశాల లాగింగ్ను అమలు చేస్తాయి.
- ప్రవర్తన మార్పు:
- GC ప్రొఫైలింగ్ ప్రారంభించబడినప్పుడు (MDBX_ENABLE_PROFGC=ON ఎంపికతో రూపొందించండి), పేజీ జాబితాలను విలీనం చేయడానికి వెచ్చించిన CPU సమయం ఇప్పుడు లెక్కించబడుతుంది, అనగా. pnl_merge() ఫంక్షన్ పని చేయడానికి.
- టెస్టింగ్ యుటిలిటీలో, డేటా మోడ్ విలువ data.dups నుండి data.multiకి పేరు మార్చబడింది.
- cursor_seek()లో కీ పొడవు నియంత్రణ మెరుగుపరచబడింది.
- mdbx_env_set_option(MDBX_opt_txn_dp_limit)ని ఉపయోగించి వినియోగదారు వాస్తవ విలువను పేర్కొనకపోతే, అందుబాటులో ఉన్న RAM మొత్తం మరియు డేటాబేస్ పరిమాణం ఆధారంగా ప్రతి నాన్-నెస్టెడ్ రైటింగ్ లావాదేవీ ప్రారంభంలో డర్టీ-పేజీల-పరిమితి సర్దుబాటు చేయబడుతుంది.
- MDBX_NOSTICKYTHREADS మోడ్లో, ఏదైనా థ్రెడ్/థ్రెడ్ నుండి సమూహ లావాదేవీలకు కట్టుబడి/నిలిపివేయడం అనుమతించబడుతుంది.
- MDBX_WRITEMAP మోడ్లో సమూహ లావాదేవీలను అమలు చేయడానికి ప్రయత్నిస్తున్నప్పుడు, లాగింగ్ చేయబడుతుంది మరియు MDBX_INCOMPATIBLE లోపం చూపబడుతుంది.
- C++ APIలో, కన్స్ట్రక్టర్లు/ఇనిషియలైజర్లు మరియు డేటాబేస్ జ్యామితి ఏర్పడటానికి సంబంధించిన పద్ధతుల్లో, డిఫాల్ట్ విలువలు మాత్రమే డిఫాల్ట్గా ఉపయోగించబడతాయి.
- mdbx_env_set_geometry() లోపల, వినియోగదారు “డిఫాల్ట్గా” అభ్యర్థించిన డేటాబేస్ జ్యామితి పారామితులను ఎంచుకోవడానికి హ్యూరిస్టిక్స్ మెరుగుపరచబడ్డాయి.
- దిద్దుబాట్లు:
- డిబిఐ డిస్క్రిప్టర్ను మళ్లీ మూసివేయడానికి ప్రయత్నిస్తున్నప్పుడు మ్యూటెక్స్ అన్లాక్ చేయబడని రిగ్రెషన్ పరిష్కరించబడింది, దానితో అనుబంధించబడిన పట్టికను తొలగించిన తర్వాత డిస్క్రిప్టర్ను స్పష్టంగా మూసివేయడానికి ప్రయత్నించినప్పుడు కూడా.
- MDBX_APPEND మోడ్లో డేటా చొప్పించిన తర్వాత నెస్టెడ్/డూప్సార్ట్ కర్సర్ స్థితి యొక్క స్థిర రిగ్రెషన్.
- LXC కంటైనర్లో పని చేస్తున్నప్పుడు boot_idని పొందేందుకు మద్దతు.
- సమూహ పఠన లావాదేవీని ప్రారంభించే ప్రయత్నం యొక్క తప్పు ప్రాసెసింగ్తో సమస్య పరిష్కరించబడింది. MDBX_EINVAL లోపం ఇప్పుడు అటువంటి పరిస్థితులలో తిరిగి ఇవ్వబడింది ఎందుకంటే గూడు అనేది రీడ్-రైట్ లావాదేవీలకు మాత్రమే మద్దతు ఇస్తుంది.
- LCK ఫైల్ని ఉపయోగించకుండా రీడ్-ఓన్లీ మోడ్లో పని చేస్తున్నప్పుడు సున్నా చిరునామాను యాక్సెస్ చేసే SIGSEGV రిగ్రెషన్ తొలగించబడింది, ఉదాహరణకు, డేటాబేస్ను రీడ్-ఓన్లీ మీడియాలో ఉంచేటప్పుడు.
మూలం: opennet.ru
