Last chance! 50% off DataCamp Premium
Sale ends in
चाहे आप ग्राहक-केंद्रित ऐप बना रहे हों या जटिल एनालिटिक्स पाइपलाइन चला रहे हों, एक बात स्पष्ट हो जाती है: आप डेटा को कैसे स्टोर और एक्सेस करते हैं, वही परफॉर्मेंस को बना या बिगाड़ सकता है।
मैंने प्रत्यक्ष रूप से देखा है कि जब डेटा को सोच-समझकर संरचित किया जाता है तो सिस्टम कितने सुचारू रूप से चलता है—और यहीं डेटा पार्टिशनिंग काम आती है। यह उन तकनीकों में से एक है जो क्वेरी स्पीड, स्टोरेज दक्षता और स्केलेबिलिटी में भारी सुधार कर सकती है।
इस पोस्ट में, मैं डेटा पार्टिशनिंग, उपलब्ध विभिन्न प्रकारों, और रास्ते में सीखी गई सर्वोत्तम प्रथाओं की व्याख्या करूँगा।
डेटा पार्टिशनिंग बड़े डेटासेट्स को छोटे, प्रबंधनीय हिस्सों में बाँटने की तकनीक है, जिन्हें पार्टिशन कहा जाता है। प्रत्येक पार्टिशन में डेटा का एक उपसमुच्चय होता है और इसे कई नोड्स या सर्वरों पर वितरित किया जाता है। ये पार्टिशन अलग-अलग टेबल्स की तरह स्टोर, क्वेरी और मैनेज किए जा सकते हैं, भले ही तर्कसंगत रूप से वे एक ही डेटासेट के भाग हों।
डेटा पार्टिशनिंग डेटाबेस परफॉर्मेंस और स्केलेबिलिटी में सुधार करती है। उदाहरण के लिए, पूरी टेबल में किसी डेटा पॉइंट को खोजना अधिक समय और संसाधन लेता है, जबकि किसी विशिष्ट पार्टिशन में उसे खोजना तेज़ होता है। यही कारण है कि डेटा को पार्टिशन के रूप में स्टोर किया जाता है।
डेटा पार्टिशनिंग में कई प्रकार शामिल हैं, जिनमें से प्रत्येक की अपनी रणनीति और लाभ होते हैं। इस खंड में, मैं सबसे सामान्य प्रकारों पर चर्चा करता हूँ।
सारा डेटा एक ही टेबल में स्टोर करने के बजाय, हॉरिज़ॉन्टल पार्टिशनिंग डेटा को पंक्तियों में विभाजित करती है, यानी अलग-अलग पंक्ति-समूहों को पार्टिशन के रूप में स्टोर किया जाता है।
हॉरिज़ॉन्टल पार्टिशनिंग के सभी पार्टिशनों में कॉलम्स का सेट समान होता है, लेकिन पंक्तियों के समूह अलग-अलग होते हैं।
|
Temperature |
State |
Country |
Season |
|
-30° F |
Alaska |
USA |
Winter |
|
48.2° F |
Queensland |
Australia |
Summer |
|
100° F |
Andhra Pradesh |
India |
Summer |
|
35° F |
California |
USA |
Winter |
|
96° F |
Texas |
USA |
Summer |
|
62° F |
Tasmania |
Australia |
Winter |
देश के आधार पर हॉरिज़ॉन्टल पार्टिशनिंग:
|
Temperature |
State |
Country |
Season |
|
-30° F |
Alaska |
USA |
Winter |
|
35° F |
California |
USA |
Winter |
|
35° F |
California |
USA |
Winter |
|
Temperature |
State |
Country |
Season |
|
48.2° F |
Queensland |
Australia |
Summer |
|
62° F |
Tasmania |
Australia |
Winter |
|
Temperature |
State |
Country |
Season |
|
100° F |
Andhra Pradesh |
India |
Summer |
वर्टिकल पार्टिशनिंग डेटा को कॉलम्स के आधार पर विभाजित करती है, इसलिए प्रत्येक पार्टिशन में पंक्तियों की संख्या समान होती है, लेकिन कॉलम कम होते हैं।
पार्टिशन की या प्राइमरी कॉलम हर पार्टिशन में मौजूद होगा, ताकि तर्कसंगत संबंध बना रहे।
वर्टिकल पार्टिशनिंग संवेदनशील जानकारी को सामान्य डेटा से अलग स्टोर करने के लिए लोकप्रिय है। यह संवेदनशील कॉलम्स को एक पार्टिशन में और सामान्य डेटा को दूसरे में सेव करने देता है।
एक अन्य सामान्य उपयोग यह है कि अक्सर अपडेट होने वाले कॉलम्स को एक पार्टिशन में समूहित किया जाए और बाकी को अलग पार्टिशन में रखा जाए।
|
Emp_id |
Emp_name |
Designation |
Emp_email |
Emp_phone |
Emp_salary |
|
z0yu9h |
Alex |
Data scientist |
alex@yoho.com |
+101 890 456 |
250K |
|
f8o5pj |
Adam |
Data engineer |
adam@prodgy.com |
+630 789 365 |
230K |
|
z006yu |
Matt |
Data analyst |
matt@oltk.com |
+857 342 937 |
166K |
|
a6u895 |
Elina |
Ops engineer |
elina@wal.com |
+892 494 782 |
190K |
|
g68w90 |
Joseph |
Software engineer |
joseph@yoho.com |
+852 603 389 |
210K |
Emp_id उपरोक्त टेबल में यूनिक पहचानकर्ता है, इसलिए सभी पार्टिशनों में यह मौजूद है।
पार्टिशन 1:
|
Emp_id |
Emp_name |
Designation |
Emp_email |
|
z0yu9h |
Alex |
Data scientist |
alex@yoho.com |
|
f8o5pj |
Adam |
Data engineer |
adam@prodgy.com |
|
z006yu |
Matt |
Data analyst |
matt@oltk.com |
|
a6u895 |
Elina |
Ops engineer |
elina@wal.com |
|
g68w90 |
Joseph |
Software engineer |
joseph@yoho.com |
पार्टिशन 2:
|
Emp_id |
Emp_phone |
Emp_salary |
|
z0yu9h |
+101 890 456 |
250K |
|
f8o5pj |
+630 789 365 |
230K |
|
z006yu |
+857 342 937 |
166K |
|
a6u895 |
+892 494 782 |
190K |
|
g68w90 |
+852 603 389 |
210K |
रेंज पार्टिशनिंग किसी विशेष कॉलम के मानों की एक सीमा के आधार पर डेटा को विभाजित करती है।
आम तौर पर, प्रत्येक पार्टिशन में की कॉलम के लिए लोअर और अपर बाउंड होते हैं, और जो रिकॉर्ड इस रेंज में आता है, उसे उसी पार्टिशन को सौंपा जाता है।
|
Product_id |
Date |
Profit |
|
z0yu9h |
2021-03-17 |
$100K |
|
f8o5pj |
2022-04-04 |
$234K |
|
z006yu |
2022-09-13 |
$789K |
|
a6u895 |
2021-07-23 |
$237K |
|
g68w90 |
2022-02-26 |
$2345K |
पार्टिशन 1:
|
product_id |
Date |
Profit |
|
z0yu9h |
2021-03-17 |
$100K |
|
a6u895 |
2021-07-23 |
$237K |
पार्टिशन 2:
|
product_id |
Date |
Profit |
|
f8o5pj |
2022-04-04 |
$234K |
|
z006yu |
2022-09-13 |
$789K |
पार्टिशन की पर एक हैश फंक्शन लगाया जाता है, और आउटपुट यह तय करता है कि कौन-सा रिकॉर्ड किस पार्टिशन में स्टोर होगा। इस तकनीक में, पार्टिशनों की संख्या पहले से तय की जाती है।
हैश मान को पार्टिशनों की संख्या से भाग देने पर प्राप्त शेष यह निर्धारित करता है कि वह रिकॉर्ड किस पार्टिशन में स्टोर होना चाहिए। इसे एक उदाहरण से समझते हैं:
z0yu9h वाले प्रोडक्ट के लिए hash('z0yu9h') = 101 और पार्टिशनों की संख्या = 4 है, तो 101%4 = 1। इसलिए, यह रिकॉर्ड पहले पार्टिशन में स्टोर होगा। इसी तरह, पार्टिशन की कॉलम के लिए हैश मान निकाला जाता है, उसे पार्टिशनों की संख्या से विभाजित किया जाता है, और परिणाम अंतिम पार्टिशन निर्धारित करता है।
प्रक्रिया रेंज पार्टिशनिंग जैसी ही है, लेकिन मानों की रेंज के बजाय, लिस्ट पार्टिशनिंग डेटा को पूर्व-निर्धारित मानों के सेट के आधार पर विभाजित करती है।
तापमान वाली टेबल को फिर से उदाहरण के रूप में लें।
|
Temperature |
State |
Country |
Season |
|
30° F |
Alaska |
USA |
Winter |
|
48.2° F |
Queensland |
Australia |
Summer |
|
100° F |
Andhra Pradesh |
India |
Summer |
|
35° F |
California |
USA |
Winter |
|
96° F |
Texas |
USA |
Summer |
|
62° F |
Tasmania |
Australia |
Winter |
उपरोक्त डेटा में, ‘Season’ कॉलम में मानों की सूची ['winter', 'summer'] है। इसलिए, सीज़न पर लिस्ट पार्टिशनिंग इस प्रकार दिखेगी:
पार्टिशन 1:
|
Temperature |
State |
Country |
Season |
|
30° F |
Alaska |
USA |
Winter |
|
35° F |
California |
USA |
Winter |
|
62° F |
Tasmania |
Australia |
Winter |
पार्टिशन 2:
|
Temperature |
State |
Country |
Season |
|
48.2° F |
Queensland |
Australia |
Summer |
|
100° F |
Andhra Pradesh |
India |
Summer |
|
96° F |
Texas |
USA |
Summer |
कम्पोज़िट पार्टिशन दो पार्टिशनिंग तकनीकों का संयोजन है। पहले एक रणनीति से टेबल को बाँटा जाता है, और फिर प्रत्येक पार्टिशन को दूसरी तकनीक से आगे विभाजित किया जाता है।
पार्टिशनिंग रणनीतियों पर तकनीकी इंटरव्यू में अक्सर चर्चा होती है—2025 के शीर्ष DBA इंटरव्यू प्रश्न देखें।
अब जब हमने विभिन्न पार्टिशनिंग रणनीतियों का मूल्यांकन कर लिया है, तो आइए देखें कि डेटा पार्टिशनिंग कब उपयोगी है।
डिस्ट्रिब्यूटेड सिस्टम्स ऐसे नोड्स का संग्रह हैं जो भौतिक रूप से अलग-अलग सर्वरों पर स्थित होते हैं, लेकिन नेटवर्क के माध्यम से जुड़े रहते हैं। उदाहरणों में Apache Cassandra, Amazon DynamoDB और Google Bigtable शामिल हैं।
ये सिस्टम आंतरिक रूप से डेटा पार्टिशनिंग का उपयोग करते हैं ताकि डेटा को नोड्स में व्यवस्थित और वितरित किया जा सके।
OLAP बहु-आयामी डेटा को क्यूब्स के रूप में दर्शाता है, जिससे उपयोगकर्ता अलग-अलग कोणों से डेटा का अन्वेषण कर सकें। हालांकि ये क्यूब्स प्री-एग्रीगेटेड डेटा को दर्शाते हैं, मूलभूत डेटा फिर भी विशाल होता है, इसलिए क्वेरीज़ को डेटा पार्टिशनिंग से और अनुकूलित करने की आवश्यकता होती है।
उदाहरण के लिए, क्यूब पार्टिशनिंग (एक डेटा पार्टिशनिंग तकनीक) लागू करने से डेटा को विशिष्ट मानदंडों के आधार पर छोटे क्यूब्स में बाँटा जाता है। जब आप डेटा क्वेरी करते हैं, तो अप्रासंगिक क्यूब्स को छोड़ते हुए किसी विशिष्ट क्यूब पर खोज की जाती है, जिससे I/O ऑपरेशंस कम होते हैं।
इसी प्रकार, डाइमेंशन पार्टिशनिंग का उपयोग करके डेटा को लेवल, हाइरार्की या कॉलम के आधार पर विभाजित किया जा सकता है।
लॉग्स में किसी सिस्टम में होने वाली घटनाओं, लेनदेन और ऑपरेशंस की जानकारी होती है। इनका उपयोग विफलताओं, बग्स, एज केस, और यहाँ तक कि सफलता संदेशों को ट्रेस करने के लिए किया जाता है।
लॉग पार्टिशनिंग डिबगिंग प्रक्रिया को तेज़ करती है और आपको आवश्यक जानकारी जल्दी देती है। उदाहरण के लिए, यदि आपने लॉग्स को समय अवधि के आधार पर पार्टिशन किया है, तो आप उन्हें दिन, सप्ताह, माह या वर्ष के अनुसार आसानी से प्राप्त कर सकते हैं।
मशीन लर्निंग के उपयोग मामलों में, डेटा को प्रशिक्षण, मान्यकरण और परीक्षण सेट्स में विभाजित किया जाता है। इससे सुनिश्चित होता है कि परीक्षण सेट से मिली अंतर्दृष्टि मॉडल को प्रशिक्षण के दौरान प्रकट न हो, जिससे ओवरफिटिंग से बचा जा सके।
इसके अलावा, यदि प्रशिक्षण डेटा बहुत बड़ा है, तो एक अकेली मशीन पूरे डेटा को प्रोसेस करके मॉडल में नहीं खिला सकती। इसलिए, डेटा को खंडों में बाँटा जाता है और डेटा पार्टिशनिंग के माध्यम से मॉडल में इनपुट किया जाता है।
डेटा पार्टिशनिंग को SQL और NoSQL दोनों प्रकार के डेटाबेस में लागू किया जा सकता है। आइए इस खंड में उन पर चर्चा करें।
PostgreSQL रेंज, लिस्ट और हैश पार्टिशनिंग के लिए बिल्ट-इन सपोर्ट प्रदान करता है। उदाहरण के लिए, निम्न क्वेरी प्रत्येक वर्ष के लिए एक पार्टिशन बनाती है ताकि प्रत्येक वित्तीय वर्ष के लिए बिक्री लाभ और कुल बिक्री तक कुशलतापूर्वक पहुँचा जा सके।
CREATE TABLE sales(
city_id int not null,
sales_year date not null,
total_sales int,
sales_profits int
) PARTITION BY RANGE (sales_year);
MySQL रेंज, लिस्ट, हैश और की पार्टिशनिंग जैसी विभिन्न प्रकार की हॉरिज़ॉन्टल पार्टिशनिंग को सपोर्ट करता है। वर्तमान में (संस्करण 8.4), यह वर्टिकल पार्टिशनिंग को सपोर्ट नहीं करता।
नीचे दी गई MySQL क्वेरी कर्मचारियों के डेटा को उनकी जॉइनिंग डेट के आधार पर तीन समूहों p1, p2 और p3 में पार्टिशन करती है। 2000 से पहले जुड़ने वाले सभी कर्मचारी p1 पार्टिशन में आते हैं। 2000 से 2010 के बीच जुड़ने वाले p2 में, और 2010 से 2020 के बीच जुड़ने वाले p3 में आते हैं।
CREATE TABLE employee(
firstname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
salary INT,
joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN (2010),
PARTITION p3 VALUES LESS THAN (2020)
);
SQL Server पार्टिशन फंक्शन और पार्टिशन स्कीम के माध्यम से पार्टिशनिंग सुविधाएँ प्रदान करता है। पार्टिशन फंक्शन बताता है कि डेटा कैसे विभाजित होगा, जबकि पार्टिशन स्कीम उस फाइलग्रुप को निर्धारित करती है जहाँ पार्टिशन स्टोर होगा।
निम्न क्वेरीज़ में:
sales_by_yearsales_filegroupfg01, fg02, fg03, fg04पार्टिशन फंक्शन:
create partition function sales_by_year (date)
as range right for values
('2024-01-01', '2024-02-01', '2024-03-01', ‘2024-04-01’);
पार्टिशन स्कीम:
CREATE PARTITION SCHEME sales_filegroup
AS PARTITION sales_by_year
TO (fg01, fg02, fg03, fg04);
यहाँ फाइलें डेटा को इस प्रकार स्टोर करती हैं:
fg01 - ‘2024-01-01’ से पहले की तिथियाँ,fg02 - ‘2024-01-01’ से ‘2024-01-31’ तकfg03 - ‘2024-02-01’ से ‘2024-02-29’ तकfg04 - ‘2024-03-01’ से ‘2024-03-31’ तकक्योंकि हमने क्वेरी में range right का उल्लेख किया है, प्रत्येक सीमा-तिथि को अगले पार्टिशन में शामिल किया जाता है।
यदि आप SQL Server का उपयोग कर रहे हैं, तो यह SQL Server ट्यूटोरियल पार्टिशन किए गए डेटा को मैनेज करने के लिए प्रमुख अवधारणाओं और टूल्स को समझाता है। एक संरचित लर्निंग पाथ के लिए, SQL Server Fundamentals ट्रैक उन मुख्य विशेषताओं का परिचय देता है जिनकी आवश्यकता उच्च-प्रदर्शन SQL डाटाबेस बनाने के लिए होती है।
DynamoDB आंतरिक रूप से स्वतः पार्टिशनिंग संभालता है। जब आप DynamoDB टेबल में कोई आइटम लिखते हैं, तो वह एक रिक्वेस्ट राउटर से होकर गुजरता है। राउटर पार्टिशन की को पार्स करता है और एक हैश फंक्शन लागू करता है। हैश फंक्शन का आउटपुट यह निर्धारित करता है कि रिकॉर्ड किस विशिष्ट पार्टिशन में स्टोर होगा।
यह पूरी प्रक्रिया DynamoDB के भीतर स्वचालित है, इसलिए उपयोगकर्ता को हैश फंक्शन या पार्टिशनों के प्रबंधन की चिंता नहीं करनी पड़ती।
MongoDB शार्डिंग की अवधारणा के माध्यम से डेटा को सर्वरों में वितरित करता है। डेटा को एक शार्ड की के आधार पर पार्टिशन किया जाता है, जिसे असमान वितरण से बचने के लिए सावधानी से चुना जाना चाहिए।
आमतौर पर, शार्ड की की उच्च कार्डिनैलिटी होनी चाहिए और वह क्वेरीज़ में अक्सर उपयोग होने वाला कॉलम होना चाहिए। ये MongoDB इंटरव्यू प्रश्न लगभग सभी महत्वपूर्ण विषयों को कवर करते हैं, जिसमें शार्डिंग भी शामिल है।
Cassandra पार्टिशनर एक हैशिंग एल्गोरिथ्म है जो यह निर्धारित करता है कि किसी क्लस्टर में कौन-सा नोड किसी विशेष पार्टिशन को स्टोर करेगा। पार्टिशन की को एल्गोरिथ्म से गुजारा जाता है ताकि एक टोकन उत्पन्न हो। फिर इस टोकन की तुलना नोड्स को सौंपे गए टोकन मानों से की जाती है। अंततः, डेटा उसी नोड में स्टोर होता है जिसका टोकन मेल खाता है।
सामान्य पार्टिशन एल्गोरिथ्म में Murmur3Partitioner, RandomPartitioner, और ByteOrderedPartitioner शामिल हैं।
अब, सही तरीके से डेटा पार्टिशनिंग लागू करने के लिए आवश्यक चरणों पर चर्चा करते हैं।
यह आकलन करें कि आपका एप्लिकेशन डेटाबेस को कैसे क्वेरी करता है, कौन-सा डेटा अक्सर एक्सेस होता है, डेटा का आकार क्या है, और कहाँ परफॉर्मेंस बॉटलनेक्स हैं। ये अंतर्दृष्टियाँ पार्टिशनिंग के लिए स्पष्ट लक्ष्य तय करने और डेटा ऑपरेशंस में अक्सर शामिल प्रमुख कॉलम्स की पहचान करने में मदद करेंगी।
हमने पहले सामान्य तकनीकों को कवर किया है, और यहाँ उनके बीच निर्णय कैसे लें:
नीचे हैश पार्टिशनिंग का उपयोग करके पार्टिशन बनाने के लिए एक उदाहरण SQL क्वेरी दी गई है।
CREATE TABLE employees (
emp_id INT NOT NULL,
name VARCHAR(30),
hired DATE NOT NULL DEFAULT '2024-01-01',
job_id INT,
location_id INT
)
PARTITION BY HASH(location_id)
PARTITIONS 4;
ऊपर दिए गए कोड में ‘location_id’ कॉलम हैश फंक्शन को पास किया जाता है, और आउटपुट यह निर्धारित करता है कि रिकॉर्ड किस पार्टिशन को सौंपा जाना चाहिए। कोड की पंक्ति partitions 4 यह निर्दिष्ट करती है कि कुल कितने पार्टिशन बनाए जाने चाहिए।
इस उपयोगी SQL बेसिक्स चीट शीट को बुकमार्क करें ताकि पार्टिशन लागू करते समय कोर SQL सिंटैक्स का संदर्भ ले सकें।
सॉफ्टवेयर जगत की हर चीज़ की तरह, ऑप्टिमाइज़ेशन के साथ समझौते और चुनौतियाँ आती हैं। यहाँ वे हैं जिन पर आपको विचार करना चाहिए:
जैसा कि आप देख सकते हैं, डेटा की मात्रा बढ़ने पर डेटा पार्टिशनिंग जटिल हो जाती है। हालाँकि, इन अभ्यासों को लागू करने से यह सुनिश्चित होगा कि पार्टिशनिंग दक्षता में सुधार करे और परफॉर्मेंस पर प्रतिकूल प्रभाव न पड़े।
प्रभावी डेटा पार्टिशनिंग आपके डेटा के बढ़ने के साथ परफॉर्मेंस और स्केलेबिलिटी बनाए रखने के लिए महत्वपूर्ण है। सही रणनीति के साथ, आप क्वेरी लेटेंसी घटा सकते हैं, स्टोरेज को अनुकूलित कर सकते हैं, और मेंटेनेंस को सरल बना सकते हैं। यह व्यावहारिक कदम है जिसका मापने योग्य प्रभाव पड़ता है।
यह जानने के लिए कि पार्टिशनिंग कैसे डिस्ट्रिब्यूटेड सिस्टम्स को स्केल करने में सक्षम बनाती है, Kafka पार्टिशन पर इस गाइड को देखें। यह समझने के लिए कि रिलेशनल संरचनाएँ पार्टिशनिंग निर्णयों को कैसे प्रभावित करती हैं, यह रिलेशनल डेटाबेस कोर्स से शुरू करें।
Srujana चार-वर्षीय कंप्यूटर साइंस डिग्री के साथ एक फ्रीलांस टेक राइटर हैं। डेटा साइंस, क्लाउड कंप्यूटिंग, डेवलपमेंट, प्रोग्रामिंग, सुरक्षा, और अन्य कई विषयों पर लिखना उनके लिए स्वाभाविक है। उन्हें शास्त्रीय साहित्य से प्रेम है और नए स्थानों की खोज करना पसंद है।
इन कोर्सेज़ के साथ डेटाबेस डिज़ाइन के बारे में और जानें!
{count, plural, one {कोर्स} other {कोर्स}}
{count, plural, one {कोर्स} other {कोर्स}}
{count, plural, one {कोर्स} other {कोर्स}}