Lessons
Partitioning (???????????) ???? ???
Database Connection Pooling
Postgres Command
PostgreSQL में Partitioning (पार्टिशनिंग)
पार्टिशनिंग क्या है?
PostgreSQL में Partitioning (पार्टिशनिंग) का अर्थ है किसी बड़ी टेबल को छोटे-छोटे भागों (sub-tables) में बाँटना ताकि डेटा को तेज़ी से खोजा और प्रबंधित किया जा सके।
उदाहरण के लिए यदि आपके पास sales नाम की टेबल है जिसमें कई वर्षों का डेटा है,
तो आप उसे साल या महीने के अनुसार बाँट सकते हैं जैसे:
- sales_2022
- sales_2023
- sales_2024
PostgreSQL में पार्टिशनिंग के प्रकार
1. Range Partitioning (रेंज आधारित)
डेटा को एक सीमा (Range) के आधार पर बाँटा जाता है, जैसे तारीख़ या संख्या के अनुसार।
CREATE TABLE sales (
id SERIAL,
sale_date DATE,
amount NUMERIC
) PARTITION BY RANGE (sale_date);
CREATE TABLE sales_2023 PARTITION OF sales
FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');
CREATE TABLE sales_2024 PARTITION OF sales
FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');
2. List Partitioning (सूची आधारित)
डेटा को कुछ निश्चित मानों (values) की सूची के अनुसार बाँटा जाता है।
CREATE TABLE customers (
id SERIAL,
region TEXT
) PARTITION BY LIST (region);
CREATE TABLE customers_north PARTITION OF customers
FOR VALUES IN ('NORTH');
CREATE TABLE customers_south PARTITION OF customers
FOR VALUES IN ('SOUTH');
3. Hash Partitioning (हैश आधारित)
जब रेंज या लिस्ट के अनुसार बाँटना संभव न हो, तब डेटा को बराबर हिस्सों में बाँटने के लिए हैश फ़ंक्शन का प्रयोग किया जाता है।
CREATE TABLE users (
id INT,
name TEXT
) PARTITION BY HASH (id);
CREATE TABLE users_p1 PARTITION OF users
FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE users_p2 PARTITION OF users
FOR VALUES WITH (MODULUS 4, REMAINDER 1);
Auto Monthly Partition Creation (वास्तविक SQL डेमो)
नीचे दिया गया स्क्रिप्ट PostgreSQL में एक sales टेबल बनाता है और अपने आप हर महीने के लिए partition बना देता है।
-- मुख्य टेबल बनाएं
CREATE TABLE sales (
id SERIAL PRIMARY KEY,
sale_date DATE NOT NULL,
amount NUMERIC
) PARTITION BY RANGE (sale_date);
-- ऑटो पार्टिशन बनाने के लिए PL/pgSQL ब्लॉक
DO
$$
DECLARE
i INT;
start_date DATE := DATE '2025-01-01';
end_date DATE;
BEGIN
FOR i IN 1..12 LOOP -- 12 महीने (1 साल) के लिए
end_date := start_date + INTERVAL '1 month';
EXECUTE format(
'CREATE TABLE IF NOT EXISTS sales_%s PARTITION OF sales
FOR VALUES FROM (%L) TO (%L);',
to_char(start_date, 'YYYY_MM'),
start_date,
end_date
);
start_date := end_date;
END LOOP;
END
$$;
इस स्क्रिप्ट के परिणामस्वरूप PostgreSQL 12 नई टेबल बनाएगा:
- sales_2025_01
- sales_2025_02
- ...
- sales_2025_12
FOR i IN 1..12 को बदलकर 1..120 कर सकते हैं,
जिससे 10 साल तक के पार्टिशन अपने आप बन जाएंगे।
पार्टिशनिंग के फायदे
- क्वेरी की गति में सुधार
- पुराना डेटा हटाना या आर्काइव करना आसान
- इंडेक्स छोटे और तेज़ रहते हैं
- Maintenance (VACUUM, ANALYZE) सरल होता है