2010-11-19 13 views
6

अंतरिक्ष बचाने के लिए लघु कुंजी नामों का उपयोग करने के लिए मोंगो डीबी में यह सामान्य प्रथा है। उदाहरण के लिए, कोई "first_name"मोंगोइड और रेल के साथ फील्ड उपनाम

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

साथ ही, क्या किसी को भी ओपन सोर्स नमूना परियोजनाओं के बारे में पता है जो मोंगोइड का उपयोग करते हैं?

धन्यवाद!

उत्तर

3

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

मोंगोडीबी ओपन-सोर्स प्रोजेक्ट्स के बहुत सारे हैं। बस जिथूब पर एक खोज करें।

- यहां संपादित करें -

यह एक बहुत स्वच्छंद जवाब था। अन्य उत्तरों में वर्णित प्रसंस्करण विधियों को ओवरराइट करना (https://github.com/mongoid/mongoid/blob/master/lib/mongoid/attributes/processing.rb) परिदृश्य में अधिक उचित है जहां आपके पास छोटे फ़ील्ड नाम होना चाहिए।

+5

यह एक गति समस्या नहीं है, यह एक अंतरिक्ष मुद्दा है। "First_name" और "fn" को अरबों बार (~ 10GB बनाम ~ 2 जीबी) संग्रहित करने के बीच एक बड़ा अंतर है। यदि आप कमोडिटी हार्डवेयर पर चल रहे हैं, तो स्पेस सस्ता है, लेकिन यदि आप सर्वर ग्रेड हार्डवेयर पर चल रहे हैं, तो स्पेस महंगा है। देखें: http://blog.boxedice.com/2010/10/23/on-shortened-field-names-in-mongodb/ – Intelekshual

+0

केवल एक बार जब मैं फ़ील्ड नामों को छोटा करना चाहता हूं तो यह है कि: 1) छोटे मान, 2) बहुत बड़ा डेटासेट, 3) बहुत ढीला स्कीमा (adhoc फ़ील्ड)। उन 3 मामलों को देखते हुए मैं सहमत हूं कि प्रसंस्करण विधियों को ओवरराइट करना समझ में आता है (जैसा कि नीचे दिया गया है)। यहां तक ​​कि आपको पूछताछ करते समय भी इसे ध्यान में रखना होगा, इसलिए आप थोड़ा अधिक जटिल कोड तैयार कर रहे हैं। उदाहरण के लिए यदि मेरे पास वास्तव में एक बड़ा डेटासेट है, छोटे मान हैं, लेकिन मेरी स्कीमा लगभग कभी नहीं बदलेगी (ट्रैकिंग आंकड़ों की तरह) तो शायद मैं mongodb के बजाय postgresql का चयन करूंगा। –

+0

बहुत यकीन है कि डेवन रैपिन की राय के साथ 10 जीन (मोंगोडीबी के पीछे कंपनी) पर असहमत [1] असहमत हैं। न केवल, जैसा कि @Intelekshual उल्लेख किया गया है, क्या आप महत्वपूर्ण डिस्क स्पेस बचत का एहसास कर सकते हैं, लेकिन मोंगो को आपके कामकाजी सेट और इंडेक्स को स्मृति में स्टोर करने की आवश्यकता है। छोटे दस्तावेजों का मतलब है कि आप स्मृति में अधिक स्टोर कर सकते हैं, प्रदर्शन का उल्लेख नहीं करना चाहिए कि आपके एप कोड लाभ में अधिक ब्लोटेड मोंगो डॉक्स [1]: http://docs.mongodb.org/manual/faq/developers/# कैसे-करें-i-optimize-storage-use-small-document – xentek

0

ऐसा कुछ आपकी कक्षा फ़ाइल में काम करना चाहिए। (यह सभी मामलों में परीक्षण किया नहीं किया गया है, बस या उसे अपडेट में एक हैश गुजर।)

field :fn, :type => String 

    alias :first_name :fn 
    alias :filtered_process :process 

    def process(attrs = nil) 
    attrs[:fn] = attrs[:first_name] unless attrs.nil? 
    filtered_process(attrs) 
    end 
+0

मोंगोइड 3 ने फील्ड अलियासिंग के लिए समर्थन में बनाया है, इसलिए आपको रूबी की विधि-कैश-विनाशकारी उपनाम विधि को नियोजित करने की आवश्यकता नहीं है। – xentek

11

आप

field :fn, :as => :firstname 

उपयोग करने पर विचार करना चाहिए के रूप में यहां उनका उल्लेख: http://groups.google.com/group/mongoid/browse_thread/thread/ce3298d6a167bd70

इस एक बहुत अच्छा अभ्यास है जो पूरी तरह से mongoid में समर्थित है।

+0

विचार यह है कि आपका ऐप कोड 'प्रथम नाम' कहता है और 'fn' नहीं। मोंगोइड सिर्फ मोंगो में 'एफएन' के रूप में आंतरिक रूप से क्षेत्र को स्टोर करता है। – xentek

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