2010-05-04 16 views
5

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

पृष्ठभूमि: मैं रेल एप्लिकेशन पर मेरी रूबी के लिए कुछ एनालिटिक्स और डैशबोर्ड उपकरण लिख रहा हूँ और मैं परिणाम है कि कभी नहीं बदल जाएगा कैशिंग द्वारा डैशबोर्ड में तेजी लाने की उम्मीद कर रहा हूँ। अभी मैं सभी उपयोगकर्ताओं को पिछले 30 दिनों से खींचता हूं, और उन्हें फिर से व्यवस्थित करता हूं ताकि मैं प्रतिदिन नए उपयोगकर्ताओं की संख्या देख सकूं। यह बहुत अच्छा काम करता है लेकिन काफी लंबा समय लगता है, वास्तव में मुझे केवल हाल के दिन की गणना करने की आवश्यकता है और बाकी जगह को बाकी जगहों को स्टोर करना चाहिए।

इस सरणी को स्टोर करने का सबसे अच्छा तरीका कहां है?

डेटाबेस तालिका बनाना थोड़ा अधिक लगता है, और मुझे यकीन नहीं है कि वैश्विक चर सही जवाब हैं। क्या इस तरह के डेटा को बनाए रखने के लिए कोई अच्छा अभ्यास है?

अगर किसी ने मुझे यह बताने से पहले ऐसा कुछ किया है कि आपने क्या किया और यह कैसे निकला।

उत्तर

11

रूबी में एक निर्मित हैश-आधारित कुंजी मूल्य स्टोर है जिसे पीएसटीओआर नाम दिया गया है। यह सरल फ़ाइल आधारित, लेनदेन संबंधी दृढ़ता प्रदान करता है।

+0

मुझे यह बहुत पसंद है, यह नहीं पता था कि समस्या विवरण के आधार पर यह अस्तित्व में था, और अनुभव क्या आप "डीबी का उपयोग करें" के अन्य सुझावों पर इस विधि की सिफारिश करेंगे? – Schneems

+0

यदि आपका उपयोग-मामला सिर्फ सरणी को क्रमबद्ध करना है, जो ऐसा लगता है, तो क्यों नहीं? यदि यह आपके लिए काम नहीं करता है तो लाइन के नीचे किसी अन्य समाधान में बदलना आसान है। –

1

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

+0

मुझे लगता है कि मुझे लगता है overkill वर्तमान में, स्कीमा लेखन डेटाबेस पलायन, मेरे रेल परियोजना में दो अलग अलग एडाप्टर के साथ काम से आएगा (सब कुछ के लिए MYSQL का उपयोग करके), और फिर एसक्यूएल प्रश्नों को लिखना (क्योंकि ये आइटम मॉडल के साथ बंधे नहीं हैं) ... जब दिन के अंत में मैं वापस चाहता हूं [1,2,3,4,5] । मुझे यह सब करने में कोई फर्क नहीं पड़ता, मैं यह देखने के लिए उत्सुक हूं कि दूसरों ने एक ही परिदृश्य से कैसे संपर्क किया है। – Schneems

1

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

कहा जा रहा है कि आप जिस प्रकार की रिपोर्ट उत्पन्न करने की कोशिश कर रहे हैं वह वास्तव में कुछ ऐसा है जो वास्तविक समय में बड़े डेटा सेट को छोड़कर किया जा सकता है। कुंजी इंडेक्स होना है जो सटीक समूहिंग ऑपरेशन का वर्णन करती है जिसे आप करने का प्रयास कर रहे हैं। उदाहरण के लिए, यदि आप कैलेंडर तिथि से समूह कर रहे हैं, तो आप "दिनांक" फ़ील्ड बना सकते हैं और इसे आवश्यकतानुसार "बनाए गए" समय में समन्वयित कर सकते हैं। इस तिथि के मैदान पर एक सूचकांक बहुत जल्दी CREATED_DATE द्वारा एक ग्रुप कर देगा:

SELECT created_date AS on_date, COUNT(id) AS new_users FROM users GROUP BY created_date 
+0

दुर्भाग्यवश मैं केवल उपयोगकर्ताओं के लिए ऐसा नहीं कर रहा हूं, लेकिन कुछ अन्य तत्वों के साथ-साथ प्रतिदिन भेजे गए ईमेल की संख्या हजारों (प्रति दिन) में है, इसलिए पिछले 30 दिनों के मॉडल डेटा के मूल्य को हमेशा के लिए खींचते हैं। फिर एक बार जब मुझे ऑब्जेक्ट मिल जाए तो मुझे create_at (दिनांक/समय ऑब्जेक्ट) लेना होगा और वस्तुओं को समूहबद्ध करने के माध्यम से पुनरावृत्ति का मूल्यांकन करना होगा। शायद एक बेहतर तरीका है, लेकिन मैं अभी तक सिर पर नाखून मारने में सक्षम नहीं हूं। – Schneems

+1

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

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