MariaDB
 sql >> डेटाबेस >  >> RDS >> MariaDB

मारियाडीबी टेम्पोरल टेबल्स क्या हैं?

10.3.4 से शुरू होकर, मारियाडीबी टेम्पोरल टेबल के साथ आता है। यह अभी भी काफी असामान्य विशेषता है और हम थोड़ी चर्चा करना चाहेंगे कि वे टेबल क्या हैं और वे किसके लिए उपयोगी हो सकती हैं।

सबसे पहले, अगर किसी ने इस ब्लॉग के शीर्षक को गलत तरीके से पढ़ा है, तो हम यहां अस्थायी तालिकाओं के बारे में बात कर रहे हैं, न कि अस्थायी तालिकाओं के बारे में, जो कि मारियाडीबी में भी मौजूद हैं। हालांकि उनमें कुछ समानता है। समय। अस्थायी तालिकाएँ अल्पकालिक होती हैं, दूसरी ओर अस्थायी तालिकाएँ समय के साथ डेटा तक पहुँच प्रदान करने के लिए डिज़ाइन की जाती हैं। संक्षेप में, आप अस्थायी तालिकाओं को एक संस्करण तालिका के रूप में देख सकते हैं जिसका उपयोग पिछले डेटा तक पहुंचने और संशोधित करने के लिए किया जा सकता है, यह पता लगाएं कि क्या परिवर्तन किए गए हैं और कब। इसका उपयोग किसी विशेष समय में डेटा को रोलबैक करने के लिए भी किया जा सकता है।

MariaDB में टेम्पोरल टेबल्स का उपयोग कैसे करें

एक टेम्पोरल टेबल बनाने के लिए हमें केवल CREATE TABLE कमांड में "WITH SYSTEM VERSIONING" जोड़ना होगा। यदि आप नियमित तालिका को अस्थायी तालिका में बदलना चाहते हैं, तो आप चला सकते हैं:

ALTER TABLE mytable ADD SYSTEM VERSIONING;

बस इतना ही। एक टेम्पोरल टेबल बनाई जाएगी और आप इसके डेटा को क्वेरी करना शुरू कर सकते हैं। ऐसा करने के कुछ तरीके हैं।

सबसे पहले, हम विशेष समय के अनुसार डेटा को क्वेरी करने के लिए SELECT का उपयोग कर सकते हैं:

SELECT * FROM mytable FOR SYSTEM_TIME AS OF TIMESTAMP ‘2020-06-26 10:00:00’;

आप किसी श्रेणी के लिए क्वेरी भी कर सकते हैं:

SELECT * FROM mytable FOR SYSTEM_TIME FROM ‘2020-06-26 08:00:00’ TO ‘2020-06-26 10:00:00’;

सभी डेटा दिखाना भी संभव है:

SELECT * FROM mytable FOR SYSTEM_TIME ALL;

यदि आवश्यक हो, तो आप उसी पैटर्न का अनुसरण करते हुए, जैसा कि हमने ऊपर दिखाया है, टेम्पोरल तालिकाओं से दृश्य बना सकते हैं।

यह देखते हुए कि समान पंक्तियों को एक ही समय में सभी नोड्स पर अपडेट नहीं किया जा सकता है (उदाहरण के लिए, प्रतिकृति के कारण देरी), यदि आप डेटा की बिल्कुल समान स्थिति देखना चाहते हैं एकाधिक दास, आप InnoDB लेनदेन आईडी का उपयोग करके समय के बिंदु को परिभाषित कर सकते हैं:

SELECT * FROM mytable FOR SYSTEM_TIME AS OF TRANSACTION 123;

डिफ़ॉल्ट रूप से सभी डेटा पंक्तियों के वर्तमान और पुराने दोनों संस्करणों में एक ही तालिका में संग्रहीत किया जाता है। जब आप केवल हाल के डेटा को क्वेरी करते हैं तो यह कुछ ओवरहेड जोड़ सकता है। ऐतिहासिक डेटा को संग्रहीत करने के लिए एक या अधिक विभाजन बनाकर और पंक्तियों के हाल के संस्करणों को संग्रहीत करने के लिए इस ओवरहेड को कम करने के लिए विभाजन का उपयोग करना संभव है। फिर, विभाजन प्रूनिंग का उपयोग करते हुए, मारियाडीबी क्वेरी के परिणाम के साथ आने के लिए डेटा की मात्रा को कम करने में सक्षम होगी:

CREATE TABLE mytable (a INT) WITH SYSTEM VERSIONING

  PARTITION BY SYSTEM_TIME INTERVAL 1 WEEK (

    PARTITION p0 HISTORY,

    PARTITION p1 HISTORY,

    PARTITION p2 HISTORY,

    PARTITION pcur CURRENT

  );

आप इसे विभाजित करने के अन्य साधनों का भी उपयोग कर सकते हैं, उदाहरण के लिए, प्रति विभाजन संग्रहीत करने के लिए पंक्तियों की संख्या को परिभाषित करना।

विभाजन का उपयोग करते समय, अब हम पुराने विभाजन को हटाकर डेटा रोटेशन जैसी नियमित विभाजन सर्वोत्तम प्रथाओं को लागू कर सकते हैं। यदि आपने पार्टिशन नहीं बनाया है, तब भी आप निम्न कमांड के द्वारा ऐसा कर सकते हैं:

DELETE HISTORY FROM mytable;

DELETE HISTORY FROM mytable BEFORE SYSTEM_TIME '2020-06-01 00:00:00';

यदि आवश्यक हो, तो आप कुछ स्तंभों को संस्करण से बाहर कर सकते हैं:

CREATE TABLE mytable (

   a INT,

   b INT WITHOUT SYSTEM VERSIONING

) WITH SYSTEM VERSIONING;

MariaDB 10.4 में एक नया विकल्प जोड़ा गया है, आवेदन-समय अवधि। इसका मतलब यह है कि मूल रूप से, सिस्टम समय के बजाय तालिका में दो कॉलम (समय-आधारित) के आधार पर संस्करण बनाना संभव है:

CREATE TABLE mytable (

   a INT, 

   date1 DATE,

   date2 DATE,

   PERIOD FOR date_period(date1, date2));

समय के आधार पर पंक्तियों को अपडेट करना या हटाना भी संभव है (भाग के लिए अद्यतन और भाग के लिए हटाएं)। एप्लिकेशन-टाइम और सिस्टम-टाइम वर्जनिंग को एक टेबल में मिलाना भी संभव है।

मारियाडीबी में अस्थायी तालिकाओं के उदाहरण

ठीक है, हमने संभावनाओं पर चर्चा की है, आइए कुछ ऐसी चीजों पर एक नज़र डालते हैं जो हम टेम्पोरल टेबल के साथ कर सकते हैं।

सबसे पहले, आइए एक तालिका बनाएं और इसे कुछ डेटा से भरें:

MariaDB [(none)]> CREATE DATABASE versioned;

Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> use versioned

Database changed

MariaDB [versioned]> CREATE TABLE mytable (a INT, b INT) WITH SYSTEM VERSIONING;

Query OK, 0 rows affected (0.005 sec)



MariaDB [versioned]> INSERT INTO mytable VALUES (1,1);

Query OK, 1 row affected (0.001 sec)

MariaDB [versioned]> INSERT INTO mytable VALUES (2,1);

Query OK, 1 row affected (0.001 sec)

MariaDB [versioned]> INSERT INTO mytable VALUES (3,1);

Query OK, 1 row affected (0.000 sec)

अब, कुछ पंक्तियों को अपडेट करते हैं:

MariaDB [versioned]> UPDATE mytable SET b = 2 WHERE a < 3;

Query OK, 2 rows affected (0.001 sec)

Rows matched: 2  Changed: 2  Inserted: 2  Warnings: 0

अब, तालिका में संग्रहीत सभी पंक्तियों को देखते हैं:

MariaDB [versioned]> SELECT * FROM mytable FOR SYSTEM_TIME ALL ;

+------+------+

| a    | b    |

+------+------+

|    1 |    2 |

|    2 |    2 |

|    3 |    1 |

|    1 |    1 |

|    2 |    1 |

+------+------+

5 rows in set (0.000 sec)

जैसा कि आप देख सकते हैं, तालिका में न केवल पंक्तियों के वर्तमान संस्करण हैं, बल्कि मूल मान भी हैं, इससे पहले कि हम उन्हें अपडेट करें।

अब, देखते हैं कि समय क्या है और फिर कुछ और पंक्तियां जोड़ें। हम देखेंगे कि क्या हम वर्तमान और पिछले संस्करण देख सकते हैं।

MariaDB [versioned]> SELECT NOW();

+---------------------+

| NOW()               |

+---------------------+

| 2020-06-26 11:24:55 |

+---------------------+

1 row in set (0.000 sec)

MariaDB [versioned]> INSERT INTO mytable VALUES (4,1);

Query OK, 1 row affected (0.001 sec)

MariaDB [versioned]> INSERT INTO mytable VALUES (5,1);

Query OK, 1 row affected (0.000 sec)

MariaDB [versioned]> UPDATE mytable SET b = 3 WHERE a < 2;

Query OK, 1 row affected (0.001 sec)

Rows matched: 1  Changed: 1  Inserted: 1  Warnings: 0;

अब, तालिका की सामग्री की जांच करते हैं। पंक्तियों के केवल वर्तमान संस्करण:

MariaDB [versioned]> SELECT * FROM mytable;

+------+------+

| a    | b    |

+------+------+

|    1 |    3 |

|    2 |    2 |

|    3 |    1 |

|    4 |    1 |

|    5 |    1 |

+------+------+

5 rows in set (0.000 sec)

फिर, इससे पहले कि हम इन्सर्ट और अपडेट करें, टेबल की स्थिति तक पहुंचें:

MariaDB [versioned]> SELECT * FROM mytable FOR SYSTEM_TIME AS OF TIMESTAMP '2020-06-26 11:24:55';

+------+------+

| a    | b    |

+------+------+

|    2 |    2 |

|    3 |    1 |

|    1 |    2 |

+------+------+

3 rows in set (0.000 sec)

उम्मीद के मुताबिक काम करता है, हमें तालिका में केवल तीन पंक्तियां दिखाई देती हैं।

यह संक्षिप्त उदाहरण किसी भी तरह से व्यापक नहीं है। हम आपको कुछ विचार देना चाहते थे कि आप अस्थायी तालिकाओं को कैसे संचालित कर सकते हैं। इसके आवेदन असंख्य हैं। ई-कॉमर्स में ऑर्डर की स्थिति को बेहतर तरीके से ट्रैक करना, सामग्री का संस्करण (कॉन्फ़िगरेशन फ़ाइलें, दस्तावेज़), विश्लेषणात्मक उद्देश्यों के लिए पिछले डेटा में अंतर्दृष्टि।

इसे स्पष्ट करने के लिए, इस सुविधा को "पारंपरिक" तालिकाओं का उपयोग करके लागू किया जा सकता है, जब तक आप पंक्तियों को सम्मिलित करते रहते हैं, उन्हें अपडेट नहीं करते हैं, लेकिन अस्थायी तालिकाओं का उपयोग करते समय प्रबंधन करना आसान होता है।

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मारियाडीबी में LENGTH () कैसे काम करता है?

  2. मारियाडीबी और बाहरी डेटा

  3. MariaDB क्लस्टर के लिए MaxCtrl का उपयोग करते हुए MaxScale बेसिक मैनेजमेंट

  4. डेबियन जेसी में मारियाडीबी 10.1 स्थापित करना और विभिन्न मारियाडीबी क्वेरी चलाना

  5. टेराफॉर्म के साथ MySQL/MariaDB वॉल्ट डेटाबेस सीक्रेट इंजन का प्रावधान