2010-09-10 9 views
5

Mongo'da basit bir kodlama kurulumu ile ilgili sorun yaşıyorum. 10.0.44.16 - - 10.0.44.10 - - yapılandırma sunucusu,
Makine B MongosMongo sharding, geniş koleksiyonları parçalara bölmek için başarısız oluyor

Makine A kırığı 1:

İki kırıkları, tek Mongos örneği ve bu kadarını tek yapılandırma sunucusu var
Makine C - 10.0.44.11 - shard 2

ben koleksiyonunda her belge üzerinde bulunan bir alandır bir shard anahtar 'SeedType' vardır ve dördünden biri içeriyor 'Tohumlar' adında bir koleksiyona sahip değerleri (aşağıdaki keskinleştirme durumuna bakınız). Değerlerin ikisi diğer ikisinden önemli ölçüde daha fazla girdiye sahiptir (bunlardan ikisinin her biri 784.000 kayıtlıdır, ikisi de 5.000 civarındadır).

Görmeyi umduğum davranış, InventoryPOS ile 'Tohumlar' koleksiyonundaki kayıtların bir parçada sona ereceği ve InventoryOnHand olanların diğeriyle sonuçlanacağıdır. Ancak, daha büyük iki shard anahtarının tüm kayıtlarının, birincil shard üzerinde olduğu anlaşılıyor.

--- 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 }

Yanlış bir şey yapıyorum:

İşte benim Kırma işlemi durum metni (netlik için kaldırılmıştır diğer koleksiyonları) var? Yarı ilgisiz soru

:

atomik tüm Mongo hizmetini engelleme olmadan başka bir koleksiyondan bir nesne aktarmak için en iyi yolu nedir? peşin

sayesinde -Tim

cevap

6

Sharding Gerçekten bu şekilde kullanılmak üzere tasarlanmamıştır. MongoDB'nin makul boyutta parçalar oluşturabilmesi için, bir çeşit varyasyon içeren bir shard anahtar seçmelisiniz (ya da bir bileşik shard tuşu). Sharding'in noktalarından biri, uygulamanızın verilerinizin nerede olduğunu bilmek zorunda olmamasıdır.

El ile parçalamak istiyorsanız, bunu yapmanız gerekir: bağlantısız MongoDB sunucularını başlatın ve istemci tarafında kendiniz yönlendirin.

Son olarak, bu kurulum için gerçekten adanmışsanız, parçayı kendiniz taşıyabilirsiniz (moveChunk komutu vardır).

Dengeleyici, bellekte ne kadar eşlendiğine bağlı olarak parçaları taşır (serverStatus'u çalıştırın ve "eşlenen" alanına bakın). Bir süre alabilir, MongoDB verilerinizin üretimde her yerde uçmasını istemiyor, bu yüzden oldukça muhafazakar.

Yarı ilgisiz yanıt: Bunu, (birden çok sunucuda atomik olmayan) sivrileştirme ile atomik olarak yapamazsınız. FindOne yapmak, eklemek, kaldırmak zorundasınız.

İlgili konular