Shard key là field (hoặc nhóm field) dùng để chia dữ liệu ra các shard. Chọn đúng là cực kỳ quan trọng vì rất khó đổi sau này.
Ba tiêu chí:
- Cardinality cao (nhiều giá trị khác nhau): chọn status chỉ có active/inactive thì tối đa chỉ chia được 2 nhóm — vô dụng.
- Phân bố đều: tránh hot-spot. Key tăng dần đều theo thời gian/ObjectId sẽ khiến mọi lệnh ghi dồn vào shard mới nhất.
- Hỗ trợ query: query thường dùng nên chứa shard key để tránh "scatter-gather" (hỏi mọi shard). Hashed shard key chia tải rất đều nhưng kém cho range query; ranged shard key thì ngược lại.