MariaDB सर्वर सबसे लोकप्रिय ओपन-सोर्स डेटाबेस सर्वरों में से एक है। यह MySQL के मूल डेवलपर्स द्वारा बनाया गया था और यह तेज, स्केलेबल और मजबूत होने के लिए लोकप्रिय हो गया। MariaDB के पास स्टोरेज इंजन, प्लगइन्स और अन्य उपलब्ध टूल का एक समृद्ध पारिस्थितिकी तंत्र है जो इसे विभिन्न प्रकार के उपयोग के मामलों के लिए बहुत बहुमुखी बनाता है।
मारियाडीबी स्टोरेज इंजन के लिए, आपके पास चुनने के लिए विभिन्न प्रकार हैं जैसे कि XtraDB, InnoDB, MyRocks, MyISAM, या यहां तक कि Aria। सबसे अच्छा भंडारण इंजन प्रकार नहीं है, क्योंकि यह कार्यभार पर ही निर्भर करता है। अंतिम उल्लेखित, एरिया स्टोरेज इंजन, मारियाडीबी 5.1 से डिफ़ॉल्ट रूप से संकलित किया गया है और मारियाडीबी सेवा शुरू होने पर इसे 'उपयोग में' होना आवश्यक है।
इस ब्लॉग में, हम देखेंगे कि एरिया स्टोरेज इंजन क्या है, और मारियाडीबी सर्वर में इसका उपयोग कैसे किया जाता है।
एरिया स्टोरेज क्या है?
Aria MySQL और MariaDB के लिए एक स्टोरेज इंजन है। इसे मूल रूप से MariaDB और MySQL के लिए डिफ़ॉल्ट ट्रांजेक्शनल और नॉन-ट्रांसेक्शनल स्टोरेज इंजन बनने के लक्ष्य के साथ विकसित किया गया था।
वर्तमान में, यह एन्क्रिप्शन और गतिरोध का पता लगाने का समर्थन करता है, और यह MyISAM के लिए क्रैश-सुरक्षित विकल्प भी प्रदान करता है। जब मारियाडीबी एक दुर्घटना के बाद फिर से शुरू होता है, तो एरिया एक स्टेटमेंट की शुरुआत में या अंतिम LOCK TABLES स्टेटमेंट की शुरुआत में राज्य में सभी टेबल को रिकवर करता है।
एरिया बाहरी और आंतरिक जांच, मरम्मत, और पंक्तियों के संपीड़न, विभिन्न पंक्ति प्रारूपों, विभिन्न सूचकांक संपीड़ित प्रारूपों, aria_chk, और बहुत कुछ का समर्थन करता है।
इस स्टोरेज इंजन का उपयोग 10.4 संस्करण से मारियाडीबी सिस्टम टेबल के लिए किया गया है।
एरिया और माईसाम के बीच अंतर
आइए आरिया और उसके प्रत्यक्ष प्रतियोगी के बीच कुछ बुनियादी अंतर देखें:माईसाम, और फिर एरिया स्टोरेज इंजन के फायदे और नुकसान।
- एरिया बड़ी लॉग फ़ाइलों (डिफ़ॉल्ट रूप से 1G) का उपयोग करता है।
- Aria में एक लॉग नियंत्रण फ़ाइल (aria_log_control) और लॉग फ़ाइलें (aria_log.%) हैं। आवश्यकता न होने पर या मांग पर शुद्ध होने पर लॉग फ़ाइलों को स्वचालित रूप से शुद्ध किया जा सकता है।
- Aria डिफ़ॉल्ट रूप से 8K पृष्ठों का उपयोग करता है, जबकि MyISAM 1K का उपयोग करता है। यह निश्चित आकार की कुंजियों का उपयोग करते समय एरिया को थोड़ा तेज़ बनाता है, लेकिन चर-लंबाई वाली पैक कीज़ का उपयोग करते समय धीमा हो जाता है।
एरिया स्टोरेज इंजन के लाभ
- डेटा और इंडेक्स क्रैश-सुरक्षित हैं।
- एक क्रैश होने पर, परिवर्तनों को एक स्टेटमेंट या अंतिम LOCK TABLES स्टेटमेंट की शुरुआत की स्थिति में वापस लाया जाएगा।
- एरिया लॉग से लगभग सब कुछ फिर से चला सकता है। जिन चीज़ों को अभी तक नहीं चलाया जा सकता वे हैं:
- INSERT को एक खाली टेबल में बैचें।
- टेबल बदलें।
- LOAD INDEX अवांछित इंडेक्स के लिए इंडेक्स ब्लॉक को छोड़ सकता है।
- सभी MyISAM ROW स्वरूपों और नए पृष्ठ प्रारूप का समर्थन करता है जहां डेटा पृष्ठों में संग्रहीत किया जाता है।
- एक ही टेबल में कई समवर्ती इंसर्टर्स।
- पेज प्रारूप का उपयोग करते समय, पंक्ति डेटा को पेज कैश द्वारा कैश किया जाता है।
- एरिया में अधिकांश भागों के यूनिट परीक्षण हैं।
- क्रैश-सुरक्षित और लेन-देन संबंधी तालिकाओं का नहीं, दोनों का समर्थन करता है।
- PAGE एकमात्र क्रैश-सुरक्षित/लेन-देन संबंधी पंक्ति प्रारूप है।
- पृष्ठ प्रारूप को खराब डेटा कैशिंग वाले सिस्टम पर एक उल्लेखनीय गति सुधार देना चाहिए।
- MariaDB 10.5 से, MyISAM में 1000 बाइट्स की तुलना में अधिकतम कुंजी लंबाई 2000 बाइट्स है।
एरिया स्टोरेज इंजन के नुकसान
- एरिया INSERT DELAYED का समर्थन नहीं करता।
- एरिया एकाधिक कुंजी कैश का समर्थन नहीं करता।
- पेज प्रारूप के लिए बहुत छोटी पंक्तियों (<25 बाइट्स) का संग्रहण कुशल नहीं है।
- MERGE तालिकाएं एरिया का समर्थन नहीं करती हैं।
- ब्लॉक प्रारूप में एरिया डेटा पेजों का ओवरहेड 10 बाइट्स/पेज और 5 बाइट्स/पंक्ति है। लेन-देन और एकाधिक समवर्ती-लेखक समर्थन नई पंक्तियों के लिए 7 बाइट्स, हटाई गई पंक्तियों के लिए 14 बाइट्स और पुरानी संकुचित पंक्तियों के लिए 0 बाइट्स के अतिरिक्त ओवरहेड का उपयोग करेगा।
- कोई बाहरी लॉकिंग नहीं।
- Aria में अनुक्रमणिका और डेटा दोनों के लिए एक पृष्ठ आकार है। MyISAM प्रति अनुक्रमणिका विभिन्न पृष्ठ आकारों का समर्थन करता है।
- प्रति इंडेक्स पेज पर छोटा ओवरहेड (15 बाइट्स)।
- पेज प्रारूप के लिए न्यूनतम डेटा फ़ाइल आकार 16K है।
- आरिया वर्चुअल फ़ील्ड पर इंडेक्स का समर्थन नहीं करता है।
एरिया संग्रहण प्रारूप
यह तीन अलग-अलग टेबल स्टोरेज प्रारूपों का समर्थन करता है।
निश्चित-लंबाई
इन तालिकाओं में एक निश्चित लंबाई के रिकॉर्ड होते हैं। वास्तविक सामग्री की परवाह किए बिना, प्रत्येक कॉलम सभी रिकॉर्ड के लिए समान लंबाई है। यदि तालिका में कोई BLOB, TEXT, VARCHAR या VARBINARY फ़ील्ड नहीं है, और कोई ROW FORMAT प्रदान नहीं किया गया है, तो यह डिफ़ॉल्ट प्रारूप है।
विशेषताएं:
- तेज़, क्योंकि MariaDB को हमेशा पता चलेगा कि रिकॉर्ड कहाँ से शुरू होता है।
- कैश करने में आसान।
- डायनामिक तालिकाओं की तुलना में अधिक स्थान लें, क्योंकि प्रत्येक रिकॉर्ड के लिए अधिकतम संग्रहण स्थान आवंटित किया जाएगा।
- एक दुर्घटना के बाद पुनर्निर्माण निश्चित स्थिति के कारण आसान नहीं है।
- कोई विखंडन नहीं है या फिर से व्यवस्थित करने की आवश्यकता नहीं है, जब तक कि रिकॉर्ड हटा दिए गए हैं और आप स्थान खाली नहीं करना चाहते हैं।
BLOB या TEXT फ़ील्ड वाली तालिकाएँ FIXED नहीं की जा सकतीं, क्योंकि डिज़ाइन के अनुसार, ये दोनों गतिशील फ़ील्ड हैं।
गतिशील
इन तालिकाओं में एक चर लंबाई के रिकॉर्ड होते हैं। यदि तालिका में कोई BLOB, TEXT, VARCHAR, या VARBINARY फ़ील्ड है, और कोई ROW FORMAT प्रदान नहीं किया गया है, तो यह डिफ़ॉल्ट स्वरूप है।
विशेषताएं:
- प्रत्येक पंक्ति में एक शीर्षलेख होता है जो पंक्ति की लंबाई दर्शाता है।
- पंक्तियां आसानी से खंडित हो जाती हैं। किसी रिकॉर्ड को लंबे समय तक अपडेट करने से यह सुनिश्चित हो जाएगा कि यह डिस्क पर विभिन्न स्थानों पर संग्रहीत है।
- चार या अधिक लंबाई वाले सभी स्ट्रिंग कॉलम गतिशील होते हैं।
- उन्हें निश्चित-लंबाई वाली तालिकाओं की तुलना में बहुत कम स्थान की आवश्यकता होती है।
- एक क्रैश के बाद पुनर्स्थापित करना FIXED तालिकाओं की तुलना में अधिक जटिल है।
पेज
एरिया तालिकाओं के लिए यह डिफ़ॉल्ट प्रारूप है, और यह एकमात्र प्रारूप है जिसका उपयोग किया जा सकता है यदि TRANSACTIONAL को 1 पर सेट किया गया हो।
विशेषताएं:
- इसे पेज कैश द्वारा कैश किया जाता है, जो बेहतर रैंडम प्रदर्शन देता है क्योंकि यह कम सिस्टम कॉल का उपयोग करता है।
- यह UPDATES के दौरान DYNAMIC प्रारूप की तरह आसानी से खंडित नहीं होता है। अंशों की अधिकतम संख्या बहुत कम है।
- डायनेमिक टेबल की तुलना में अधिक तेज़ी से अपडेट होता है।
- एक मामूली भंडारण ओवरहेड है, मुख्य रूप से बहुत छोटी पंक्तियों पर उल्लेखनीय है।
- एक पूर्ण तालिका स्कैन करने के लिए धीमा।
- अगर कई डुप्लीकेट कुंजियां हैं, तो धीमी करें, क्योंकि एरिया पहले एक पंक्ति लिखेगी, फिर कुंजियां, और उसके बाद ही डुप्लीकेट की जांच करेगी।
तालिका द्वारा उपयोग किए जाने वाले संग्रहण प्रारूप को जानने के लिए आप तालिका स्थिति विवरण दिखाएं का उपयोग कर सकते हैं।
एरिया स्टोरेज इंजन के लिए लेन-देन संबंधी विकल्प
असल में, एरिया के लिए, ट्रांजेक्शनल का मतलब क्रैश-सुरक्षित है, और यह विभाजित तालिकाओं के लिए समर्थित नहीं है। इसे काम करने के लिए पेज पंक्ति प्रारूप की भी आवश्यकता होती है।
TRANSACTIONAL और ROW_FORMAT तालिका विकल्प निम्नानुसार परस्पर क्रिया करते हैं:
- यदि TRANSACTIONAL=1 सेट है, तो केवल समर्थित पंक्ति प्रारूप पृष्ठ है। यदि ROW_FORMAT किसी अन्य मान पर सेट है, तो एरिया एक चेतावनी जारी करती है, लेकिन फिर भी पंक्ति प्रारूप को पृष्ठ होने के लिए बाध्य करती है।
- यदि TRANSACTIONAL=0 सेट है, तो तालिका क्रैश-सुरक्षित नहीं होगी, और कोई भी पंक्ति प्रारूप समर्थित है।
- यदि TRANSACTIONAL किसी मान पर सेट नहीं है, तो कोई भी पंक्ति प्रारूप समर्थित है। यदि ROW_FORMAT सेट है, तो तालिका उस पंक्ति प्रारूप का उपयोग करेगी। अन्यथा, तालिका डिफ़ॉल्ट पृष्ठ पंक्ति प्रारूप का उपयोग करेगी। इस मामले में, यदि तालिका पृष्ठ पंक्ति प्रारूप का उपयोग करती है, तो यह क्रैश-सुरक्षित होगी। यदि यह किसी अन्य पंक्ति प्रारूप का उपयोग करता है, तो यह क्रैश-सुरक्षित नहीं होगा।
MariaDB सर्वर पर एरिया स्टोरेज इंजन का उपयोग कैसे करें
सबसे पहले, आपको एक डेटाबेस बनाना होगा (यदि आपने एक नहीं बनाया है), और इसका उपयोग करें:
MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.003 sec)
MariaDB [(none)]> use db1
Database changed
फिर, "एरिया" इंजन का उपयोग करके एक तालिका बनाएं:
MariaDB [db1]> CREATE TABLE table1 (id int(11) DEFAULT NULL, name text)
-> ENGINE=Aria
-> TRANSACTIONAL=1;
Query OK, 0 rows affected (0.025 sec)
हमने इसे यहां देखने के लिए 1 में TRANSACTIONAL मान निर्दिष्ट किया है, लेकिन, जैसा कि हमने उल्लेख किया है, यह आवश्यक नहीं है क्योंकि यह डिफ़ॉल्ट रूप से 1 होगा यदि हम पंक्ति प्रारूप और लेनदेन संबंधी मूल्यों को निर्दिष्ट किए बिना एरिया का उपयोग कर रहे हैं। अब, आपके पास टेबल बन जाएगी:
MariaDB [db1]> SHOW CREATE TABLE table1\G
*************************** 1. row ***************************
Table: table1
Create Table: CREATE TABLE `table1` (
`id` int(11) DEFAULT NULL,
`name` text DEFAULT NULL
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
1 row in set (0.000 sec)
और तालिका की स्थिति में, आप लेन-देन संबंधी और पंक्ति प्रारूप दोनों मानों की जांच कर सकते हैं:
MariaDB [db1]> SHOW TABLE STATUS\G
*************************** 1. row ***************************
Name: table1
Engine: Aria
Version: 10
Row_format: Page
Rows: 0
Avg_row_length: 0
Data_length: 8192
Max_data_length: 17592186011648
Index_length: 8192
Data_free: 0
Auto_increment: NULL
Create_time: 2020-06-30 18:59:17
Update_time: 2020-06-30 18:59:17
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options: transactional=1
Comment:
Max_index_length: 137438945280
Temporary: N
1 rows in set (0.001 sec)
एरिया स्टोरेज इंजन से संबंधित कॉन्फ़िगर करने के लिए कई पैरामीटर हैं। आप आधिकारिक दस्तावेज़ीकरण साइट में पूरी सूची पा सकते हैं।
एरिया स्टोरेज इंजन टूल्स
आइए इस स्टोरेज इंजन के साथ काम करने के लिए कुछ टूल देखें।
aria_chk
Aria_chk का उपयोग Aria तालिकाओं की जांच, मरम्मत, अनुकूलन, सॉर्ट करने और जानकारी प्राप्त करने के लिए किया जाता है। MariaDB सर्वर के साथ, आप समान कार्य करने के लिए CHECK TABLE, REPAIR TABLE, और OPTIMIZE TABLE का उपयोग कर सकते हैं।
इस उपकरण का उपयोग तब नहीं किया जाना चाहिए जब मारियाडीबी चल रहा हो क्योंकि यह मानता है कि उसके उपयोग के दौरान तालिका नहीं बदली जाएगी।
$ aria_chk [OPTIONS] aria_tables[.MAI]
MyISAM के समान, Aria तालिका की जानकारी 2 अलग-अलग फ़ाइलों में संग्रहीत की जाती है:
- MAI फ़ाइल में आधार तालिका जानकारी और अनुक्रमणिका होती है।
- MAD फ़ाइल में डेटा होता है।
Aria_chk takes one or more MAI files as arguments.
For example, to check all your tables and repairs only those that have an error, run this command in your data directory:
$ aria_chk --check --force --sort_buffer_size=1G */*.MAI
Checking Aria file: db1/table1.MAI
Data records: 0 Deleted blocks: 0
- check file-size
- check key delete-chain
- check index reference
- check record links
...
aria_pack
Aria_pack, Aria तालिकाओं को संपीड़ित करने का एक उपकरण है। परिणामी तालिकाएँ केवल-पढ़ने के लिए होती हैं, और आमतौर पर लगभग 40% से 70% छोटी होती हैं। इस उपकरण द्वारा प्रयुक्त फ़ाइल नाम .MAI अनुक्रमणिका फ़ाइल है।
$ aria_pack [options] file_name [file_name2...]
Aria_pack प्रत्येक कॉलम को अलग से संपीड़ित करता है, और, जब परिणामी डेटा पढ़ा जाता है, तो केवल अलग-अलग पंक्तियों और स्तंभों को विघटित करने की आवश्यकता होती है, जिससे जल्दी पढ़ने की अनुमति मिलती है।
$ aria_pack /var/lib/mysql/world/country
Compressing aria_pack /var/lib/mysql/world/country.MAD: (549 records)
- Calculating statistics
- Compressing file
37.71%
Remember to run aria_chk -rq on compressed tables
एक बार टेबल पैक हो जाने के बाद, aria_chk -rq कमांड का उपयोग करके उसके इंडेक्स को फिर से बनाएं।
$ aria_chk -rq --ignore-control-file /var/lib/mysql/world/country
Recreating table '/var/lib/mysql/world/country'
- check record delete-chain
- recovering (with sort) Aria-table '/var/lib/mysql/world/country'
Data records: 549
- Fixing index 1
State updated
aria_read_log
Aria_read_log, Aria लेन-देन लॉग से लॉग रिकॉर्ड प्रदर्शित करने और लागू करने के लिए एक उपकरण है।
$ aria_read_log OPTIONS
आपको "-d" या "-a" विकल्पों में से किसी एक का उपयोग करने की आवश्यकता है:
- a:तालिकाओं पर लॉग लागू करें:तालिकाओं को संशोधित करता है। आपको पहले बैकअप बनाना चाहिए। यदि आप --silent पैरामीटर का उपयोग नहीं करते हैं तो बहुत सारी जानकारी प्रदर्शित करता है।
- d:रिकॉर्ड के हेडर से पढ़ी गई संक्षिप्त जानकारी प्रदर्शित करें।
$ cd /var/lib/mysql
$ aria_read_log -d
You are using --display-only, NOTHING will be written to disk
The transaction log starts from lsn (1,0x2007)
TRACE of the last aria_read_log
Rec#1 LSN (1,0x2007) short_trid 0 redo_create_table(num_type:30) len 1042
Rec#2 LSN (1,0x2421) short_trid 0 redo_create_table(num_type:30) len 527
Rec#3 LSN (1,0x2638) short_trid 61986 long_transaction_id(num_type:36) len 6
Rec#4 LSN (1,0x2641) short_trid 61986 file_id(num_type:35) len 22
Rec#5 LSN (1,0x265d) short_trid 61986 undo_bulk_insert(num_type:39) len 9
Rec#6 LSN (1,0x266a) short_trid 0 incomplete_log(num_type:37) len 2
Rec#7 LSN (1,0x266f) short_trid 61986 commit(num_type:27) len 0
...
निष्कर्ष
जैसा कि आप देख सकते हैं, एरिया स्टोरेज इंजन में MyISAM के मुकाबले कई सुधार हैं, और यह उपयोग करने के लिए एक बढ़िया स्टोरेज इंजन विकल्प है। इसका उपयोग करना भी आसान है क्योंकि यह मारियाडीबी सर्वर इंस्टॉलेशन का हिस्सा है, इसलिए इसे सक्षम करने के लिए केवल इंजन तालिका पैरामीटर निर्दिष्ट करना पर्याप्त है।
MariaDB अभी भी इस स्टोरेज इंजन पर काम कर रही है, इसलिए शायद हम जल्द ही भविष्य के संस्करणों में नए सुधार देखेंगे।