Bạn có thể. Có thể tách trước các phần theo cách thủ công, nó được mô tả ở đây: http:// www. mongodb.org/display/DOCS/Splitting+Chunks
Hãy suy nghĩ cẩn thận về cách bạn chia nhỏ các phần của mình. Nếu bạn làm điều đó không tốt, bạn có thể gặp rất nhiều vấn đề về hiệu suất, nhưng nếu bạn biết đủ về các khóa của mình, bạn có thể đạt được rất nhiều điều.
Nếu bạn làm điều đó, bạn có thể muốn tắt bộ cân bằng:
> use config
> db.settings.update({_id: "balancer"}, {$set: {stopped: true}}, true);
(điều này được mô tả ở đây: http://www.mongodb.org/display/DOCS / Sharding + Quản trị )
Đây là một ví dụ về cách bạn có thể làm điều đó. Tùy thuộc vào chính xác những gì bạn muốn làm, bạn sẽ phải sửa đổi nó (Tôi cho rằng khóa phân đoạn của bạn không được đặt tên là x
, ví dụ:và phạm vi của bạn không phải là -1000 đến 2000).
> use admin
> db.runCommand({split: "my_db.my_coll", middle: {x: 0}})
> db.runCommand({split: "my_db.my_coll", middle: {x: 1000}})
> db.runCommand({movechunk: "my_db.my_coll", find: {x: -1}, to: "shard_1_name"})
> db.runCommand({movechunk: "my_db.my_coll", find: {x: 0}, to: "shard_2_name"})
> db.runCommand({movechunk: "my_db.my_coll", find: {x: 1000}, to: "shard_3_name"})
split
lệnh tạo các khối. Mỗi lệnh sẽ chia đoạn chứa giá trị giữa thành hai, vì vậy lệnh đầu tiên sẽ chia đoạn chứa min_value -> max_value
thành min_value -> 0
và 0 -> max_value
. Sau đó, lệnh thứ hai chia đoạn chứa 1000, đoạn thứ hai được tạo bởi lệnh trước, thành hai đoạn mới. Sau lệnh đó, bạn có ba phần:
-
min_value -> 0
-
0 -> 1000
-
1000 -> max_value
Ba lệnh sau sẽ di chuyển các khối này thành các phân đoạn riêng biệt. Tài liệu nói rằng lệnh sẽ di chuyển đoạn chứa giá trị trong find
, vì vậy tôi đã chọn ba giá trị mà tôi biết là ở các phần khác nhau và sử dụng các giá trị này (có một ký hiệu trong BSON cho min_key
và max_key
, nhưng tôi không chắc cách sử dụng nó đúng cách trong ngữ cảnh này).
Đọc trang này nữa http://www.mongodb.org/display/DOCS/Moving + Chunks