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

MySQL:एक बड़ी तालिका को विभाजन या अलग तालिकाओं में विभाजित करना?

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

device_id को सिकोड़ें . INT 4 बाइट्स है; क्या आपके पास वाकई लाखों डिवाइस हैं? TINYINT UNSIGNED 1 बाइट है और 0..255 की सीमा है। SMALLINT UNSIGNED 2 बाइट्स और 0..64K की एक सीमा है। इससे टेबल थोड़ी सिकुड़ जाएगी।

अगर आपका असली सवाल यह है कि इतना डेटा कैसे प्रबंधित किया जाए, तो आइए "बॉक्स के बाहर सोचें"। आगे पढ़ें।

रेखांकन... आप किस दिनांक सीमा का रेखांकन कर रहे हैं?

  • 'अंतिम' घंटा/दिन/सप्ताह/माह/वर्ष?
  • एक मनमाना घंटा/दिन/सप्ताह/माह/वर्ष?
  • एक मनमाना दायरा, जो दिन/सप्ताह/महीने/वर्ष की सीमाओं से बंधा नहीं है?

आप क्या रेखांकन कर रहे हैं?

  • एक दिन में औसत मूल्य?
  • एक दिन में अधिकतम/मिनट?
  • कैंडलस्टिक्स (आदि) दिन या सप्ताह के लिए या जो भी हो?

मामले के बावजूद, आपको डेटा के साथ एक सारांश तालिका बनाना (और वृद्धिशील रूप से बनाए रखना) चाहिए। एक पंक्ति में एक घंटे के लिए सारांश जानकारी होगी। मैं सुझाव दूंगा

CREATE TABLE Summary (
    device_id SMALLINT UNSIGNED NOT NULL,
    sensor_id TINYINT UNSIGNED NOT NULL,
    hr TIMESTAMP NOT NULL,
    avg_val FLOAT NOT NULL,
    min_val FLOAT NOT NULL,
    max_val FLOAT NOT NULL
    PRIMARY KEY (device_id, sensor_id, hr)
) ENGINE=InnoDB;

एक सारांश तालिका 9GB (डेटा की वर्तमान मात्रा के लिए) हो सकती है।

SELECT hr,
       avg_val,
       min_val,
       max_val
    FROM Summary
    WHERE device_id = ?
      AND sensor_id = ?
      AND hr >= ?
      AND hr  < ? + INTERVAL 20 DAY;

आपको 480 घंटों के लिए उच्च/लो/औसत मान देगा; ग्राफ के लिए पर्याप्त है? सारांश तालिका से 480 पंक्तियों को हथियाना अपरिष्कृत डेटा तालिका से 60*480 पंक्तियों को हथियाने की तुलना में बहुत तेज़ है।

एक वर्ष के लिए समान डेटा प्राप्त करना संभवतः एक रेखांकन पैकेज को रोक देगा, इसलिए यह हो सकता है एक दिन के संकल्प के साथ - सारांश का सारांश बनाने के लायक हो। यह लगभग 0.4GB होगा।

सारांश तालिका (तालिकाओं) को बनाने के कुछ अलग तरीके हैं; हम चर्चा कर सकते हैं कि जब आपने इसकी सुंदरता पर विचार किया है और सारांश तालिका ब्लॉग . हो सकता है कि एक घंटे का डेटा एकत्र करना, फिर सारांश तालिका को बढ़ाना, सबसे अच्छा तरीका हो। यह कुछ हद तक फ्लिप-फ्लॉप की तरह होगा मेरा स्टेजिंग टेबल ब्लॉग

और, यदि आपके पास प्रति घंटा सारांश था, तो क्या आपको वास्तव में मिनट-दर-मिनट डेटा की आवश्यकता है? इसे फेंकने पर विचार करें। या, शायद एक महीने के बाद डेटा। इससे विभाजन का उपयोग होता है, लेकिन केवल पुराने डेटा को हटाने में इसके लाभ के लिए जैसा कि विभाजन ब्लॉग के "केस 1" में चर्चा की गई है . यानी, DROP . का उपयोग करके आपके पास दैनिक विभाजन होंगे और REORGANIZE हर रात "तथ्य" तालिका का समय बदलने के लिए। इससे आपका 145GB पदचिह्न कम हो जाएगा, लेकिन अधिक डेटा खोए बिना। नया पदचिह्न:लगभग 12GB (प्रति घंटा सारांश + पिछले 30 दिनों का मिनट-दर-मिनट विवरण)

पुनश्च:सारांश तालिका ब्लॉग दिखाता है कि मानक विचलन कैसे प्राप्त करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वर्तमान पासवर्ड ज्ञात नहीं होने पर MySQL रूट पासवर्ड रीसेट करना

  2. हाइबरनेट में एक विदेशी कुंजी का उत्पन्न नाम बदलना

  3. समूह द्वारा auto_increment

  4. पिछले 12 महीनों की MySQL मासिक बिक्री बिना बिक्री वाले महीनों सहित

  5. रेल 3 मैसकल समस्याएं