2010-09-10 24 views
5

Tôi đang gặp vấn đề với những gì có vẻ là một thiết lập sharding đơn giản trong mongo.Mongo sharding không chia tách bộ sưu tập lớn giữa các mảnh

Tôi có hai mảnh, một mongos trường hợp duy nhất, và một máy chủ duy nhất cấu hình thiết lập như thế này:

Máy A - 10.0.44.16 - máy chủ cấu hình, mongos
Máy B - 10.0.44.10 - mảnh 1
Máy C - 10.0.44.11 - shard 2

Tôi có bộ sưu tập có tên 'Hạt giống' có khóa phân loại 'SeedType' là trường hiển thị trên mọi tài liệu trong bộ sưu tập và chứa một trong bốn giá trị (hãy xem trạng thái tích trữ bên dưới). Hai trong số các giá trị có nhiều mục hơn đáng kể so với hai giá trị khác (hai trong số chúng có 784.000 bản ghi, và hai có khoảng 5.000).

Hành vi mà tôi mong đợi để thấy là các bản ghi trong bộ sưu tập 'Hạt giống' với InventoryPOS sẽ kết thúc trên một phân đoạn và những người có InventoryOnHand sẽ kết thúc bằng cách khác.

Tuy nhiên, có vẻ như tất cả các bản ghi cho cả hai khóa phân đoạn lớn hơn đều kết thúc trên phân đoạn chính.

Đây là tin nhắn tình trạng sharding tôi (bộ sưu tập khác xóa do rõ ràng):

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

Tôi có làm điều gì sai trái?

Bán không liên quan câu hỏi:

cách tốt nhất để nguyên tử chuyển một đối tượng từ một bộ sưu tập khác mà không chặn toàn bộ dịch vụ Mongo là gì?

Cảm ơn trước, -Tim

Trả lời

6

sharding thực sự không có nghĩa là sẽ được sử dụng theo cách này. Bạn nên chọn một khóa phân đoạn với một số biến thể (hoặc tạo một khóa phân mảnh ghép) để MongoDB có thể tạo các khối kích thước hợp lý. Một trong những điểm tích cực là ứng dụng của bạn không phải biết dữ liệu của bạn ở đâu.

Nếu bạn muốn phân mảnh theo cách thủ công, bạn nên làm điều đó: bắt đầu các máy chủ MongoDB chưa được liên kết và tự định tuyến mọi thứ từ phía máy khách.

Cuối cùng, nếu bạn thực sự dành riêng cho thiết lập này, bạn có thể tự di chuyển đoạn (có lệnh moveChunk).

Bộ cân bằng di chuyển khối dựa trên số lượng được ánh xạ trong bộ nhớ (chạy serverStatus và xem trường "ánh xạ"). Có thể mất một lúc, MongoDB không muốn dữ liệu của bạn bay khắp nơi trong sản xuất, vì vậy nó khá bảo thủ.

Câu trả lời bán không liên quan: bạn không thể làm điều đó một cách nguyên tử với sharding (eval không phải là nguyên tử trên nhiều máy chủ). Bạn sẽ phải thực hiện findOne, insert, remove.

Các vấn đề liên quan