Mongoid या MongoMapper? [बन्द है]


83

मैंने MongoMapper की कोशिश की है और यह फीचर पूर्ण है (लगभग सभी AR कार्यक्षमता की पेशकश) लेकिन मैं बड़े डेटासेट का उपयोग करते समय प्रदर्शन से बहुत खुश नहीं था। मोंगॉयड के साथ किसी की तुलना की गई है? कोई प्रदर्शन लाभ?

जवाबों:


49

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

उनके पास MongoId की तुलना में पुल अनुरोधों और बग / फ़ीचर सबमिशन की संख्या काफी कम है, यानी समुदाय की भागीदारी बहुत कम है। मेरा जैसा अनुभव?

मुझे नहीं पता कि अभी और कौन सी सुविधाएँ हैं, लेकिन मैं Mongoapp में बहुत भविष्य नहीं देखता। मैं मुद्दों को ठीक करने और खुद की कार्यक्षमता को जोड़ने में कोई आपत्ति नहीं करता, लेकिन जब वे बग को ठीक नहीं करेंगे, तो मैं उन स्थितियों को ध्यान में रखूंगा।


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

5
बिना छँटाई के पहले () मिलते समय, यह अंतिम () या (या इसके विपरीत) के रूप में काम करता है। लेकिन इकाई परीक्षण इस तरह से लिखा जाता है कि यह आदेश निर्दिष्ट करता है, इसलिए यह गुजरता है। यह अब तक तय हो सकता है, लेकिन मैं अब MongoMapper का उपयोग नहीं करता हूं। लेकिन मुझे संदेह है, मैंने देखा कि इसे कैसे लागू किया गया था, और यह एक बुरा डिजाइन है।
अयनत

नमस्ते, क्या आप इस बारे में जानकारी के लिए लिंक भेज सकते हैं कि कैसे आसानी से मोंगो मैपर से मोंगॉयड में माइग्रेट करें?
चेन किनरोट

1
@ अयानत मैं न तो यह तय कर पाया, फिर भी मैंने कोशिश की कि यह मुझे एक ही परिणाम दे दे
वीरेन

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

39

मैं पिछले कुछ हफ्तों से दोनों का उपयोग कर रहा हूं। Mongomapper के संबंधपरक संघों (गैर-एम्बेडेड) के लिए बेहतर समर्थन है और तीसरे पक्ष का अधिक से अधिक समर्थन है। मोंगॉयड के पास बेहतर क्वेरी समर्थन है, बहुत बेहतर प्रलेखन (एमएम के पास कोई नहीं है, हालांकि एक वेबसाइट माना जाता है), रेल 3 समर्थन (और इस प्रकार डेइस समर्थन) और Google समूह पर थोड़ा अधिक सक्रिय समुदाय है।

मैंने मोंगॉयड के साथ जाना समाप्त कर दिया।


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

MongoMapper के कई-कई टूटे हुए हैं: github.com/jnunemaker/mongomapper/pull/259 , github.com/jnunemaker/mongomapper/issues/488 Mongoid पर
Yevgeniy

37

मतभेद

MongoMapper

  • संबंधपरक संघों के लिए बेहतर समर्थन का दावा किया।
  • यह प्लगइन वास्तुकला की वजह से अधिक एक्स्टेंसिबल होने का दावा किया गया है।
  • क्वेरी के लिए एक DSL का उपयोग करता है।
  • कई-कई संघों को केवल MongoMapper में अपडेट किया जाता है।
  • एम्बेडेड दस्तावेजों के लिए कम मजबूत समर्थन। भले ही केवल कुछ विशेषताओं को संशोधित किया गया हो, संपूर्ण मॉडल को अपडेट करता है।

Mongoid

  • उपाख्यानात्मक साक्ष्य द्वारा MongoMapper से तेज होने का सुझाव दिया गया है।
  • एम्बेडेड दस्तावेजों के लिए अधिक मजबूत समर्थन, जगह में नेस्टेड दस्तावेजों को अपडेट करने के लिए MongoDB परमाणु संचालन ($ सेट, $ पुश, $ पुल, आदि) का उपयोग करना।
  • द्विदिश कई-से-कई संघों का समर्थन करता है।
  • क्वेरी करने के लिए एक चेनएबल AREL जैसे सिंटैक्स का उपयोग करता है।

समानताएँ

  • MongoMapper और Mongoid दोनों में अच्छी प्रलेखन वाली वेबसाइटें हैं। MongoMapper को लंबे समय से खराब दस्तावेज होने का दावा किया गया था, लेकिन उनकी नई वेबसाइट इस अंतर को बंद कर रही है।
  • दोनों को एक YAML फ़ाइल के माध्यम से कॉन्फ़िगर किया जा सकता है, और दोनों में उस फ़ाइल के लिए एक रेल जनरेटर है।
  • दोनों पूरी तरह से रेल 3 संगत हैं।

विन्यास

MongoMapper

defaults: &defaults
  host: 127.0.0.1
  port: 27017

development:
  database: database_name

Mongoid

development:
  sessions:
    default:
      database: database_name
      hosts:
        - 127.0.0.1:27017

3 पार्टी पुस्तकालय

दोनों पक्षों ने तीसरे पक्ष के बेहतर समर्थन का दावा किया है। Github निम्नलिखित का खुलासा करता है:

  • "Mongoid" के लिए खोज करने से 12671 परिणाम मिलते हैं।
  • "MongoMapper" के लिए खोज करने से 4708 परिणाम मिलते हैं।

विशेष रूप से, Devise MongoMapper का समर्थन नहीं करता है।

गतिविधि करें

पिछले वर्ष की तुलना में, ऐसा लग रहा है कि MongoMapper की तुलना में Mongoid को नियमित रूप से बनाए रखा और अद्यतन किया गया है।

MongoMapper

MongoMapper

Mongoid

Mongoid


1
Mongoid वर्तमान में पहचान मानचित्रों का समर्थन करता है।
user2503775

9

एक अंतर मैंने पाया है कि update_attributeMongoMapper में पूरे दस्तावेज़ लिखने के लिए प्रकट होता है, चाहे जो भी विशेषता वास्तव में बदल गई हो। Mongoid में यह केवल परिवर्तित विशेषताओं को लिखता है। यह बड़े रिकॉर्ड के लिए एक महत्वपूर्ण प्रदर्शन मुद्दा हो सकता है। यह एम्बेडेड दस्तावेजों (यहाँ labels) के लिए विशेष रूप से सच है , उदाहरण के लिए

profile = Profile.find(params[:id])
label = profile.labels.find_or_create_by(idx: params[:idx])
# MongoMapper doesn't have find_or_create_by for embedded docs
# -- you'll have to write custom code
profile.save

ऑन save, MongoMapper पूरे profileरिकॉर्ड को बचाएगा , लेकिन MongoId $setऑपरेटर तर्क का उपयोग करेगा केवल लेबल को परिवर्तित करने के लिए अद्यतन करेगा।

एक और मुद्दा चयन कर रहा है कि किन क्षेत्रों में वापसी करनी है। दोनों एक onlyकसौटी का समर्थन करते हैं , लेकिन मोंगॉयड एक withoutकसौटी का भी समर्थन करता है , जो मूल रूप से मानगो द्वारा समर्थित है।

यह मेरे लिए प्रतीत होता है कि मोंगॉयड सिर्फ "गोल" है और इसके एपीआई में पूर्ण है, जो शायद समझाता है कि यह एक बड़ा कोड आधार है। यह बेहतर प्रलेखित भी प्रतीत होता है।


7

क्या आपने mongo_ext स्थापित किया है? मुझे लगता है कि प्रदर्शन मैपर की तुलना में ड्राइवर से अधिक संबंधित है। जब मैंगो लॉग को देख रहा हूं, तो मैं विस्तार के बिना देख सकता हूं, कि ट्रांसजर में कुछ अंतराल है।

जैसा कि वे monogdb साइट पर सलाह देते हैं, केवल उन फ़ील्ड्स का चयन करें, जिनकी आपको ज़रूरत है।


रूबी ड्राइवर इतना तेज़ नहीं है विशेष रूप से 1.8 लेकिन 1.9 केवल प्रदर्शन को बढ़ाता है! मैं सिर्फ यह सोच रहा हूं कि क्या मोंगॉयड अधिक अनुकूलित है या केवल एक चीज जो इसे प्रदान करता है वह क्वैरिंग और सामान के लिए एक अलग दृष्टिकोण है समय के लिए मोंगोमैपर लगभग सभी एआर चीनी की पूरी सुविधा प्रदान करता है
PanosJee

1
एक साल बाद इसे पढ़ने वालों को ध्यान दें: mongo_extअब इसकी आवश्यकता नहीं है और इसे मूल mongoरत्न में रोल किया गया है ।
tkrajcar

4

क्या पिछले हफ्ते MongoMapper के साथ कुछ परीक्षण किया गया था, यह स्थिर था लेकिन मुझे क्वेरी इंटरफ़ेस थोड़ा सीमित मिला (कुछ AR तर्क भी विचित्र था), आज Mongoid में बदल गया और इसका उपयोग करना बेहतर लगता है - और अधिक सहज ज्ञान युक्त यदि आप उपयोग किए जाते हैं से ए.आर.

अभी तक कोई गति निष्कर्ष नहीं - लेकिन स्विच ओवर पीड़ारहित था - यह रेल 3 के साथ भी काम करता है।


4

यदि आप Rails3 का उपयोग कर रहे हैं, तो मैं Mongoid की सिफारिश करूंगा - यह भी वर्गों को जारी रखने के लिए "निहित" के बजाय "शामिल" का उपयोग करता है - दृढ़ता को जोड़ने के लिए रूबी में "शामिल" का उपयोग बेहतर प्रतिमान है। डिगोइड मेरे लिए डेविस के साथ ठीक काम करता है।

प्रदर्शन में सुधार करने के लिए, निम्न-स्तरीय पहुंच का चयन करने का प्रयास करें, जैसे मोपेड - मैंने इसे 10x तक तेजी से देखा है


3

मैंने उन दोनों का उपयोग किया और वे कार्यक्षमता में बराबरी करने वाले हैं, लेकिन यह कोड आँकड़े देखें Mongoid बनाम MongoMapper

ऐसा लगता है कि MongoMapper में कोड की बेहतर गुणवत्ता है (यदि यह कम के साथ भी ऐसा ही करता है)।

आप इस आंकड़े की गणना खुद से कर सकते हैं, यहां विश्लेषक https://github.com/alexeypetrushin/code_stats


12
मुख्य बिंदु: 'अगर यह कम के साथ भी ऐसा ही करता है ...
tkrajcar

10
यह पूरी तरह से निराधार लगता है।
जिम मिचेनर

14
कोड आकार के माध्यम से एक परियोजना की कोड गुणवत्ता की तुलना करना वजन को मापने के द्वारा 2 कारों की गुणवत्ता की तुलना करने जैसा है।
पेट्रीज़ियो रुल्लो

3
वास्तव में कारों के वजन की तुलना पूरी तरह से वैध है - आप बहुत अधिक निर्णय ले सकते हैं - यह कितनी तेजी से है, कितना गैसोलीन लेता है, और इसी तरह। और, वास्तव में यह वैज्ञानिक दृष्टिकोण से समझ में आता है, "कोलमोगोरोव जटिलता" पर एक नज़र डालें।
क्राफ्ट में एलेक्स क्राफ्ट

1
फिर भी, कुछ लोगों ने मोंगोमैपर की गति में बहुत सुधार किया है ( coffeepowered.net/2013/07/29/… ), यह अभी भी ज्ञात है और स्वीकार किया जाता है कि मोंगॉयड तेजी से होता है।
आदित्य सक्सेना

3

मुझे लगता है कि कॉन्फ़िगरेशन और मैपिंग में मोंगॉयड बहुत बेहतर है।


1
मै भी यही सोचता हूँ। इसके अलावा यह MongoMapper की तुलना में NoSQL के करीब महसूस करता है कि यह आपको ActiveRecord और SQL के संदर्भ में अधिक लगता है। एक और प्लस महान प्रलेखन है
PanosJee

हां! प्रलेखन के साथ Mongoid वेबसाइट चट्टानों!
रॉडरिगोलेसिवेइरा

0

मुझे उम्मीद है कि प्रदर्शन वैसा ही होगा, पिछली बार जब मैंने देखा कि MongoMapper के पास रेल 3 सपोर्ट की कमी है - तो मैं अब Mongoid देख रहा हूं।


0

sudo gem install mongo_ext प्रदर्शन करने के लिए महत्वपूर्ण है।

MongoDB कच्ची गति के मामले में CouchDB को उड़ा देता है - हालांकि सीडीबी के अपने फायदे का एक सेट है।

बेंचमार्क: http://www.snailinaturtleneck.com/blog/?p=74


वह mongoid x mongo_mapper के बारे में बात कर रहा है, जो मोंगो तक पहुँचने के लिए तेज़ रूबी रत्न है, न कि mongodb x couchdb।
विक्टर रोड्रिग्स

8
एक साल बाद इसे पढ़ने वालों को ध्यान दें: mongo_extअब इसकी आवश्यकता नहीं है और इसे मूल mongoरत्न में रोल किया गया है ।
tkrajcar

0

डेविस ने MongoMapper का समर्थन नहीं किया, और मैं भी रेल 3 तरीके से आगे बढ़ना पसंद करता हूं। इसलिए मैं मूंगॉयड में चला गया।


मुझे लगता है कि एमएम वर्तमान में इसका समर्थन करता है।
user2503775


0

मुझे आशा है कि नीचे दिए गए बिंदु उपरोक्त उत्तरों में मूल्य जोड़ते हैं।

1.मॉंगॉयड पूरी तरह से रेल 3 संगत है, और सभी जगह (सत्यापन, क्रमांकन, आदि) में एक्टिवमॉडल का उपयोग करता है, जहां MongoMapper अभी भी रेल 2 पर केंद्रित है और इसके सत्यापन के लिए वैध रत्न का उपयोग करता है।

2.Mongoid आधिकारिक तौर पर रूबी 1.8.7, 1.9.1, और 1.9.2 सिर पर समर्थन और काम करता है।

3. मेनॉइड आंतरिक रूप से पदानुक्रम के किसी भी क्षेत्र पर MongoDB परमाणु संचालन करते हुए, अधिक मजबूती से एम्बेडेड दस्तावेजों का समर्थन करता है। ($ सेट, $ पुश, $ पुल, आदि)। एमएम के साथ आपको इन कार्यों को करने के लिए स्पष्ट रूप से बताने की आवश्यकता है।

4.मोंगमोमैपर में बेहतर संबंधपरक सहयोग है और यह डिफ़ॉल्ट रूप से काम करता है।

5.मोंगमोअपर अधिक एक्स्टेंसिबल है, एक प्लगइन आर्किटेक्चर के साथ जो लोगों के लिए इसे अपने पुस्तकालयों के साथ विस्तारित करना बहुत आसान बनाता है। Mongoid के पास यह नहीं है।

6.MM पहचान मानचित्रों का समर्थन करता है, Mongoid नहीं करता है।

7.MM में एक बड़ा समुदाय है, और शायद अधिक 3 पार्टी पुस्तकालय समर्थन है। मैं प्रलेखन और rdoc पर पागल हो गया।

8.मोंगॉयड मास्टर / स्लेव प्रतिकृति समूहों का समर्थन करता है। (मास्टर को लिखता है, राउंड रॉबिन दासों को पढ़ता है) एमएम नहीं करता है।

9.Mongoid में एक अत्यंत समृद्ध AREL शैली मानदंड API है, MM AR2 शैली खोजक का उपयोग करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.