2010-09-10 12 views
5

के बीच बड़े संग्रह को विभाजित करने में विफल रहता है मुझे मोंगो में एक साधारण शेरर्ड सेटअप के साथ समस्याएं आ रही हैं। 10.0.44.16 - - config सर्वर, mongos
मशीन बी - 10.0.44.10 -मोंगो शेर्डिंग

मशीन एक ठीकरा 1:

मैं दो टुकड़े, एक भी mongos उदाहरण, और एक एकल config सर्वर इस तरह की स्थापना की है
मशीन सी - 10.0.44.11 - ठीकरा 2

मैं एक संग्रह 'बीज' नामक एक ठीकरा कुंजी 'SeedType' जो एक क्षेत्र है कि संग्रह में प्रत्येक दस्तावेज़ पर मौजूद है है है, और चार में से एक है, जो है मूल्य (नीचे शेडिंग स्थिति पर एक नज़र डालें)। दो मूल्यों में अन्य दो की तुलना में काफी अधिक प्रविष्टियां हैं (उनमें से दो में 784,000 रिकॉर्ड हैं, और दो में लगभग 5,000 हैं)।

जिस व्यवहार को मैं देखने की उम्मीद कर रहा हूं वह यह है कि इनवेंटरी पीओएस के साथ 'बीज' संग्रह में रिकॉर्ड एक शार्ड पर समाप्त हो जाएंगे, और इन्वेंटरीऑनहैंड वाले लोग दूसरे पर खत्म हो जाएंगे।

हालांकि, ऐसा लगता है कि दो बड़े शार्ड कुंजी दोनों के लिए सभी रिकॉर्ड प्राथमिक शार्ड पर समाप्त होते हैं।

--- Sharding Status --- 
    sharding version: { "_id" : 1, "version" : 3 } 
    shards: 
     { "_id" : "shard0000", "host" : "10.44.0.11:27019" } 
     { "_id" : "shard0001", "host" : "10.44.0.10:27017" } 
    databases: 
     { "_id" : "admin", "partitioned" : false, "primary" : "config" } 
     { "_id" : "TimMulti", "partitioned" : true, "primary" : "shard0001" } 
       TimMulti.Seeds chunks: 
         { "SeedType" : { $minKey : 1 } } -->> { "SeedType" : "PBI.AnalyticsServer.KPI" } on : shard0000 { "t" : 2000, "i" : 0 } 
         { "SeedType" : "PBI.AnalyticsServer.KPI" } -->> { "SeedType" : "PBI.Retail.InventoryOnHand" } on : shard0001 { "t" : 2000, "i" : 7 } 
         { "SeedType" : "PBI.Retail.InventoryOnHand" } -->> { "SeedType" : "PBI.Retail.InventoryPOS" } on : shard0001 { "t" : 2000, "i" : 8 } 
         { "SeedType" : "PBI.Retail.InventoryPOS" } -->> { "SeedType" : "PBI.Retail.SKU" } on : shard0001 { "t" : 2000, "i" : 9 } 
         { "SeedType" : "PBI.Retail.SKU" } -->> { "SeedType" : { $maxKey : 1 } } on : shard0001 { "t" : 2000, "i" : 10 }

मैंने कुछ गलत कर रहा हूँ:

यहाँ मेरी sharding स्थिति पाठ (स्पष्टता के लिए हटाया अन्य संग्रह) है?

अर्द्ध असंबंधित सवाल:

सबसे अच्छा तरीका है atomically पूरे मोंगो सेवा अवरुद्ध के बिना एक संग्रह से एक वस्तु हस्तांतरण करने के लिए क्या है?

अग्रिम धन्यवाद, टिम

उत्तर

6

Sharding वास्तव में इस तरह से इस्तेमाल किया जा करने के लिए नहीं है। आपको कुछ बदलाव के साथ एक शर्ड कुंजी चुननी चाहिए (या एक कंपाउंड शर्ड कुंजी बनाएं) ताकि मोंगोडीबी उचित आकार के टुकड़े कर सके। शेडिंग के बिंदुओं में से एक यह है कि आपके आवेदन को यह नहीं पता है कि आपका डेटा कहां है।

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

अंत में, यदि आप वास्तव में इस सेटअप के लिए समर्पित हैं, तो आप स्वयं को खंड को माइग्रेट कर सकते हैं (एक moveChunk कमांड है)।

बैलेंसर मेमोरी में मैप किए गए हिस्सों के आधार पर भाग को चलाता है (रन सर्वरस्टैटस और "मैप किए गए" फ़ील्ड को देखें)। इसमें कुछ समय लग सकता है, मोंगोडीबी नहीं चाहता कि आपका डेटा उत्पादन में जगह पर उड़ रहा हो, इसलिए यह काफी रूढ़िवादी है।

अर्ध-असंबंधित उत्तर: आप इसे शाकाहारी के साथ परमाणु रूप से नहीं कर सकते (eval एकाधिक सर्वरों पर परमाणु नहीं है)। आपको एक खोज करना होगा, डालें, हटाएं।

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