Trong MongoDB, khi bạn truy cập vào một hệ thống được phân tách và bạn không thấy bất kỳ sự cân bằng nào, nó có thể là một trong số những điều.
-
Bạn có thể không có đủ dữ liệu để kích hoạt cân bằng. Đó chắc chắn không phải là tình huống của bạn nhưng một số người có thể không nhận ra rằng với kích thước chunk mặc định là 64MB, có thể mất một lúc để chèn dữ liệu trước khi có đủ để phân chia và cân bằng một số dữ liệu đó thành các phần khác.
-
Bộ cân bằng có thể không chạy - vì các bộ sưu tập khác của bạn đang được cân bằng, điều này khó xảy ra trong trường hợp của bạn trừ khi bộ sưu tập này được chia nhỏ lần cuối sau khi bộ cân bằng bị dừng vì lý do nào đó.
-
Không thể di chuyển các phần trong bộ sưu tập của bạn. Điều này có thể xảy ra khi khóa phân đoạn không đủ chi tiết để chia dữ liệu thành các phần đủ nhỏ. Hóa ra đây là trường hợp của bạn vì khóa phân đoạn của bạn hóa ra không đủ chi tiết cho một bộ sưu tập lớn này - bạn có 105 khối (có thể tương ứng với số lượng giá trị job_id duy nhất) và hơn 30GB dữ liệu. Khi các khối quá lớn và bộ cân bằng không thể di chuyển chúng, nó sẽ gắn thẻ chúng là "jumbo" (vì vậy nó sẽ không quay bánh xe của mình khi cố gắng di chuyển chúng).
Làm thế nào để khôi phục sau sự lựa chọn sai của một khóa phân đoạn? Thông thường, rất khó để thay đổi khóa phân đoạn - vì khóa phân đoạn là bất biến nên bạn phải thực hiện tương đương với việc di chuyển toàn bộ dữ liệu để đưa nó vào bộ sưu tập với khóa phân đoạn khác. Tuy nhiên, trong trường hợp của bạn, bộ sưu tập vẫn nằm trên một phân đoạn, vì vậy sẽ tương đối dễ dàng để "tháo cứng" bộ sưu tập và làm cứng lại nó bằng một khóa phân đoạn mới. Bởi vì số lượng job_ids tương đối nhỏ, tôi khuyên bạn nên sử dụng chỉ mục thông thường để phân đoạn trên job_id, customer_code vì bạn có thể truy vấn về điều đó và tôi đoán nó luôn được đặt tại thời điểm tạo tài liệu.