मोंगोडीबी में पूछताछ में अधिकतम $ पैरामीटर पास किए गए पैरामीटर क्या हैं?
उत्तर
ऐसा लगता है कि कोई सीमा नहीं है।
मैंने एक छोटा परीक्षण किया।
1) संग्रह एक था - 1 मिलियन सरल JSON ऑब्जेक्ट {आईडी:, नाम:}
2) संग्रह बी में, मैं संग्रह एक की संदर्भ आईडी भरी हुई है जब तक मैं निम्नलिखित अपवाद हो गया। मैं अधिकतम 450k की संदर्भ संख्या डाल सकता हूं।
Exception in thread "main" com.mongodb.MongoInternalException: DBObject of size 18388885 is over Max BSON size 16777216
3) मैं [ID1 ... id450000] में $ के रूप में इन आईडी के 450k भेजने के लिए और संग्रह ए में 1 मिलियन वस्तुओं से 450k आईडी की पूरी सूची खींच
वाह सकता है! यह मेरे आवेदन के लिए पर्याप्त से अधिक है: डी। MongoDB वास्तव में अच्छा है।
+1 – Danimal
मुझे लगता है कि सीमा बस बीएसओएनडी दस्तावेज़ के आकार से निर्धारित होती है। जब आप किसी क्वेरी को परिभाषित करते हैं, तो आप मान को अधिकतम $ आकार में तब तक जोड़ सकते हैं जब तक कि आप अधिकतम दस्तावेज़ आकार से अधिक न हो जाएं। तो खंड में आपके पास कितने मूल्य हो सकते हैं इस पर निर्भर करता है कि प्रत्येक मान कितना बड़ा होता है (प्रत्येक मान का आकार छोटा होता है, जितना अधिक आप क्लॉज में $ शामिल कर सकते हैं)।
प्रदर्शन के संदर्भ में, जो मैंने पाया है, उससे खंड में $ में मूल्यों की संख्या के लिए "मीठा स्थान" है। इस संबंधित प्रश्न में मेरा उत्तर देखें: Is it OK to query a MongoDB multiple times per request?
यानी खंड में बनाम प्रश्नों की संख्या बनाम $ में मूल्यों की संख्या को संतुलित करना। मैं उस पर एक ब्लॉग पोस्ट के माध्यम से मध्य मार्ग हूं और अधिक विस्तार से कोशिश करने और गोता लगाने के लिए।
क्वेरी स्वयं एक दस्तावेज़ है। MongoDB दस्तावेज़ आकार (संस्करण 2.4.0+ के रूप में) 16 एमबी तक सीमित करता है।
वास्तव में, क्या आप एक खोज के साथ क्या कर रहे हैं:
{ 'fieldOne' : { $in : [ 1, 2, 3, 4] } }
आप एक करने के लिए पारित कर सकते हैं मूल्यों की अधिकतम संख्या ढूंढने के लिए:
db.collectionName.find(queryDoc)
जहां 'queryDoc' कुछ की तरह है $ क्वेरी में, bsonsize आदेश का उपयोग करें:
mongos> Object.bsonsize([1])
16
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4] } })
74
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5] } })
85
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6] } })
96
तो, आप देख सकते हैं कि प्रत्येक अतिरिक्त पूर्णांक आकार 11 बाइट है। 11 बिट्स नहीं, 11 BYTES। यह इस तरह से है कि बीएसओएन आंतरिक रूप से कम से कम 64 बिट्स के साथ-साथ रैपर के रूप में संख्याओं को स्टोर करता है। इसे आसानी से देखा जा सकता है:
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 690000000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000000000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000000000000000] } })
107
तो, कोई फर्क नहीं पड़ता कि किसी व्यक्तिगत संख्या का आकार क्या है, यह वही बोनसनाइज है।
प्रश्न पर स्वयं: वह प्रश्न दस्तावेज़ कितना बड़ा है?
इन ऊपर खंड में एक $ के साथ एक क्षेत्र क्वेरी के लिए, pymongo में, mongos जावास्क्रिप्ट शीघ्र, जो कुछ भी है, सब क्वेरी में एक $ का अधिकतम आकार के लिए एक ही इसके तथ्यों उपज के माध्यम से जोड़ा जा रहा है:
mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
- क्वेरी दस्तावेज़ स्वयं 22 बाइट्स है;
- फ़ील्ड नाम के प्रत्येक बाइट एक बाइट जोड़ता है;
- क्लॉज में $ में जोड़े गए प्रत्येक नंबर में 11 बाइट जोड़े गए हैं।
तो, आप यह मानकर एक एक बाइट FIELDNAME (कम से कम, वास्तव में) हैं तो आपका अधिकतम है:
mongos> 16*1024*1024
16777216
mongos> (16*1024*1024) - 22 - 1
16777193
mongos> ((16*1024*1024) - 22 -1)/11
1525199.3636363635
उत्तर: (।। यही कारण है कि 15 लाख है यही कारण है कि बहुत बड़ी है) 1,525,198
- 1. तैयार किए गए पैरामीटर
- 2. पूछताछ के लिए पैरामीटर कैसे पास करें?
- 3. नामित पैरामीटर बैच फ़ाइल में कैसे पास किए जाते हैं?
- 4. पास किए गए फ़ंक्शन के पैरामीटर की संख्या (erlang)
- 5. पृष्ठ पर पीयूटी पैरामीटर कैसे पास किए जाते हैं?
- 6. पास पैरामीटर कालबैक में समारोह
- 7. 2099 पैरामीटर पर SqlCommand अधिकतम पैरामीटर अपवाद
- 8. नियंत्रक से पैरामीटर में पैरामीटर कैसे पास करें?
- 9. मोंगोडीबी ग्रिडएफएस पूछताछ?
- 10. चींटी स्क्रिप्ट्स में पैरामीटर कैसे पास करें?
- 11. किसी साइट पेज में एम्बेड किए गए Google Apps स्क्रिप्ट गैजेट के पैरामीटर कैसे पास करें?
- 12. grails छ: लिंक पास पैरामीटर
- 13. क्या एनयूएलएल में ब्लॉक पैरामीटर में पास करना ठीक है?
- 14. RedirectToAction में पैरामीटर कैसे पास कर सकते हैं?
- 15. फ़ंक्शंस में दोहराए गए पैरामीटर चेक
- 16. पैरामीटर
- 17. पैरामीटर के रूप में ArrayList पास करना
- 18. एफ # पैरामीटर पास
- 19. सी ++ कंपाइलर्स वास्तव में संदर्भ पैरामीटर कैसे पास करते हैं?
- 20. पास अतिरिक्त पैरामीटर
- 21. 'संदर्भ द्वारा पास पैरामीटर'?
- 22. एक दृश्य में पैरामीटर कैसे पास करें
- 23. URL में POST पैरामीटर कैसे पास करें?
- 24. जावा जेनेरिक पास पैरामीटर
- 25. पास पैरामीटर Guice
- 26. क्या पर्ल मॉड्यूल लोडिंग में पैरामीटर पास करना संभव है?
- 27. बहुत नींद प्रोफाइलर में घुंघराले ब्रेसिज़ के पास प्रस्तुत किए गए समय माप क्या करते हैं?
- 28. पावरहेल में गतिशील पैरामीटर कैसे पास करें?
- 29. मोंगोडीबी/पायमोंगो: रेगेक्स खोज में पैरामीटर कैसे बचें?
- 30. डेल्फी में "ए" के साथ कुछ पैरामीटर क्यों उपसर्ग किए गए हैं?
मैंने कहीं पढ़ा है कि यह 1 000 000 है। – oyatek
दिखाए गए काम के साथ वास्तविक गणना के लिए नीचे देखें। मजेदार प्रयोगों के लिए –