2012-02-15 13 views
18

मेरे ऐप के भाग में गाने के लिए वॉल्यूम स्वचालन शामिल है।MySQL डेटाबेस में एक सरणी को स्टोर करने का सबसे अच्छा तरीका?

मात्रा स्वचालन निम्न स्वरूप में वर्णित है:

[[0,50],[20,62],[48,92]] 

मैं इस सरणी पहला मान गीत में स्थिति और मात्रा युक्त दूसरा मान युक्त के साथ एक 'डेटा बिंदु' में प्रत्येक आइटम पर विचार 0-100 के पैमाने पर।

मैं फिर इन मानों को लेता हूं और एक ऑडियो फ़ाइल के रूप में चिकनी मात्रा संक्रमण की अनुमति देने के लिए एक बेजियर वक्र बनाने के लिए 'वर्चुअल' डेटा पॉइंट्स के साथ इस डेटा को इंटरपोल करने के लिए एक फ़ंक्शन क्लाइंट-साइड निष्पादित करता हूं।

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

datapoints असीमित हो सकता है

इसके अलावा, मैं डेटा को संभाल चाहिए कि कैसे (हालांकि वास्तव में वास्तव में सबसे जा रहा है कम से कम 10 से 40-50 के आसपास से अधिक नहीं होना चाहिए)? क्या इसे टेक्स्ट फ़ील्ड में संग्रहीत किया जाना चाहिए? या क्या मुझे इसे इष्टतम परिणामों के लिए पहले से किसी तरीके से संसाधित करना चाहिए?

किसी सरणी को स्टोर करने के लिए MySQL में उपयोग करने के लिए कौन सा डेटा प्रकार सबसे अच्छा होगा?

+0

क्या डेटाप्रकार है कि आप अपने अनुप्रयोग के भीतर साथ काम कर रहे है:

इस लिंक पर एक नज़र डालें? क्या यह एक स्ट्रिंग, एक सरणी, एक वस्तु है? मैं "जैसा कि, एक टेक्स्ट फ़ील्ड में" से इकट्ठा हूं, इसका मतलब है कि आप आंतरिक रूप से स्ट्रिंग के रूप में अंक का प्रतिनिधित्व कर रहे हैं, लेकिन मैं इसे गलत पढ़ रहा हूं। –

+0

क्यों न केवल आईएनटी के प्रकार के साथ कई फ़ील्ड बनाते हैं?उदाहरण के लिए volume_min, volume_max, song_position –

+1

यदि आपको उस सरणी में मानों की खोज करने वाले प्रश्नों को खराब करने की आवश्यकता नहीं है, तो आप बस 'टेक्स्ट' फ़ील्ड का उपयोग कर सकते हैं और सरणी के क्रमबद्ध संस्करण को संग्रहीत कर सकते हैं (जिस तरह से आपने इसे यहां पोस्ट किया है ठीक है, '[[0,50], [20,62], [48,92]]')। –

उत्तर

32

निश्चित रूप से text फ़ील्ड नहीं, लेकिन varchar - शायद। मैं परिणामों को पार्स करने और व्यक्तिगत कॉलम में संग्रहीत करने की अनुशंसा नहीं करता जब तक कि आप डेटाबेस डेटा में आंकड़ों का लाभ नहीं लेना चाहते - आंकड़े इत्यादि।

यदि आप कभी भी यह नहीं पूछते कि "उपयोगकर्ता द्वारा उपयोग की जाने वाली औसत मात्रा क्या है ? " तो इसे पार्सिंग परेशान मत करो।

इस डेटा को स्टोर करने का तरीका जानने के लिए खुद से पूछें "मैं इसे बाद में कैसे उपयोग करूं?" यदि आप सरणी प्राप्त करेंगे और इसे PHP के साथ उपयोग करने की आवश्यकता है तो आप serialize फ़ंक्शन का उपयोग कर सकते हैं। यदि आप जावास्क्रिप्ट में मानों का उपयोग करेंगे तो JSON एन्कोडिंग शायद आपके लिए सबसे अच्छी होगी (साथ ही कई भाषाएं यह जानती हैं कि इसे कैसे डीकोड करें)

शुभकामनाएँ!

+1

बिल्कुल सही जवाब मिखाइल धन्यवाद। इसमें सभी बिंदुओं को शामिल किया गया था। – gordyr

+1

@ मिखाइल +1 ठीक है, लेकिन _Definitely क्यों 'text' field_? –

+1

'टेक्स्ट' को वास्तविक पाठ को स्टोर करने के लिए डिज़ाइन किया गया है - जैसे कहानी, या कविता। यह एक स्ट्रिंग को स्टोर करने के लिए डिज़ाइन नहीं किया गया है। MySQL टेक्स्ट स्टोर में "पेड़ के पत्ते" की बजाय फ़ाइल में स्टोर करता है। इसके बारे में सबकुछ धीमा, खोज, अनुक्रमण, कैशिंग है। – Mikhail

2

यदि पंक्तियों को पुनर्प्राप्त करते समय गति सबसे महत्वपूर्ण होती है तो एक नई तालिका बनाएं और इसे अपने सरणी के सूचकांक रखने के लिए समर्पित करें। डेटा प्रकार का पूर्णांक का उपयोग करें और प्रत्येक पंक्ति सरणी की अनुक्रमणिका का प्रतिनिधित्व करें। आपको एक और संख्यात्मक कॉलम बनाना होगा जो इन्हें एक साथ जोड़ता है ताकि आप एसक्यूएल क्वेरी के साथ सरणी को फिर से इकट्ठा कर सकें।

इस तरह आप MySQL की सहायता करने में आपकी सहायता करते हैं। यदि आप केवल सरणी के कुछ हिस्सों को चाहते हैं, तो आप बस SQL ​​क्वेरी में रेंज बदलते हैं और आप सरणी को फिर से इकट्ठा कर सकते हैं।

2

मेरा सुझाव है कि आप JSON डेटा प्रकार पर नज़र डालें। इस तरह आप टेक्स्ट या वर्कर की तुलना में अपने सरणी को अधिक कुशल तरीके से स्टोर कर सकते हैं, और आप पूरी जानकारी को पार्स किए बिना सीधे अपने डेटा तक पहुंच सकते हैं MySQL। https://dev.mysql.com/doc/refman/5.7/en/json.html

संबंधित मुद्दे

 संबंधित मुद्दे