क्या कोई कारण है कि आप चाइल्ड टेबल नहीं बनाते हैं ताकि आप एक सरणी के बजाय प्रति पंक्ति एक फ्लोटिंग पॉइंट मान स्टोर कर सकें?
मान लें कि आप प्रति दिन 300 तत्वों की एक हजार सरणियाँ संग्रहीत करते हैं। यानी प्रति दिन 300,000 पंक्तियाँ, या 109.5 मिलियन प्रति वर्ष। छींकने के लिए कुछ भी नहीं, लेकिन MySQL या किसी अन्य RDBMS की क्षमताओं के भीतर।
अपनी टिप्पणी दें:
ज़रूर, यदि ऑर्डर महत्वपूर्ण है तो आप ऑर्डर के लिए एक और कॉलम जोड़ते हैं। यहां बताया गया है कि मैं टेबल कैसे डिजाइन करूंगा:
CREATE TABLE VectorData (
trial_id INT NOT NULL,
vector_no SMALLINT UNSIGNED NOT NULL,
order_no SMALLINT UNSIGNED NOT NULL,
element FLOAT NOT NULL,
PRIMARY KEY (trial_id, vector_no),
FOREIGN KEY (trial_id) REFERENCES Trials (trial_id)
);
-
वेक्टर डेटा की एक पंक्ति के लिए कुल स्थान:300x(4+2+2+4) =3600 बाइट्स। साथ ही 16 बाइट्स की InnoDB रिकॉर्ड निर्देशिका (आंतरिक सामग्री)।
-
यदि आप जावा सरणी को 300 फ़्लोट्स =1227 बाइट्स के क्रमानुसार क्रमबद्ध करते हैं तो कुल स्थान?
तो आप सरणी को संग्रहीत करके लगभग 2400 बाइट्स, या 67% स्थान बचाते हैं। लेकिन मान लीजिए कि आपके पास डेटाबेस को स्टोर करने के लिए 100GB स्थान है। एक क्रमबद्ध सरणी को संग्रहीत करने से आप 87.5 मिलियन वैक्टर स्टोर कर सकते हैं, जबकि सामान्यीकृत डिज़ाइन आपको केवल 29.8 मिलियन वैक्टर स्टोर करने की अनुमति देता है।
आपने कहा था कि आप प्रति दिन कुछ सौ वैक्टर स्टोर करते हैं, इसलिए आप उस 100GB विभाजन को 239 वर्षों के बजाय केवल 81 वर्षों में भर देंगे।
अपनी टिप्पणी दोबारा दें:INSERT का प्रदर्शन एक महत्वपूर्ण मुद्दा है, लेकिन आप प्रति दिन केवल कुछ सौ वैक्टर संग्रहित कर रहे हैं।
अधिकांश MySQL अनुप्रयोग प्रति सेकंड . सैकड़ों या हजारों प्रविष्टियां प्राप्त कर सकते हैं अत्यधिक जादूगरी के बिना।
यदि आपको इष्टतम प्रदर्शन की आवश्यकता है, तो यहां कुछ बातों पर ध्यान देना चाहिए:
- स्पष्ट लेनदेन
- बहु-पंक्ति INSERT सिंटैक्स
- विलंबित सम्मिलित करें (यदि आप अभी भी MyISAM का उपयोग करते हैं)
- डेटा जानकारी लोड करें
- वैकल्पिक तालिका अक्षम कुंजियाँ, सम्मिलित करें, तालिका सक्षम कुंजी बदलें
इस बारे में बात करने वाले कई लेख और ब्लॉग पढ़ने के लिए अपने पसंदीदा खोज इंजन पर "mysql inserts per second" वाक्यांश खोजें।