MongoDB Sharding - Trải Nghiệm Tương Tác Hoàn Chỉnh

Tổng Quan
Mô Phỏng
Thực Hành
Hiệu Suất
FAQ

Sharding trong MongoDB là gì?

Sharding là kỹ thuật phân phối dữ liệu trên nhiều máy chủ (gọi là shard). MongoDB sử dụng sharding để hỗ trợ triển khai các bộ dữ liệu rất lớn và các hoạt động có thông lượng cao.

1

Vấn đề dữ liệu lớn

Khi dữ liệu tăng, một máy chủ duy nhất không thể đáp ứng

120ms
Độ trễ
85%
Dung lượng
2

Giải pháp Sharding

Chia dữ liệu thành các phần và phân phối trên nhiều máy chủ

32ms
Độ trễ
28%
Dung lượng

Mô Hình Sharding Tương Tác

Mongos 1
Mongos 2
Config 1
Config 2
Config 3
×

Metadata Config Server

Config server lưu trữ thông tin về:

  • Vị trí của các shard
  • Phân phối dữ liệu (chunk mapping)
  • Thông tin cluster
  • Trạng thái cân bằng

Dữ liệu mẫu:

{
  "shards": [
    {"_id": "shard1", "host": "shard1.example.com"},
    {"_id": "shard2", "host": "shard2.example.com"},
    {"_id": "shard3", "host": "shard3.example.com"}
  ],
  "chunks": [
    {"shard": "shard1", "min": 1, "max": 1000},
    {"shard": "shard2", "min": 1001, "max": 2000}
  ]
}

Điều Khiển Mô Phỏng

ÍtNhiều
ÍtNhiều

Tương tác với mô hình

  • Nhấp vào chunk để xem chi tiết
  • Kéo - thả chunk giữa các shard (không bị nhân bản)
  • Nhấp vào Mongos để mô phỏng truy vấn
  • Nhấp vào Config Server để xem metadata

Quy Trình Sharding Tương Tác

Kéo chunk để cân bằng dữ liệu

Kéo một chunk từ shard này sang shard khác

Kéo chunk ở trên và thả vào shard khác

Mô phỏng truy vấn

Nhấp vào nút "Mô Phỏng Truy Vấn" để xem định tuyến

Thêm dữ liệu mới

Thêm dữ liệu mới và quan sát phân phối

Khu Vực Thực Hành Tương Tác

1

Chọn Shard Key

Thử chọn các shard key khác nhau và xem cách dữ liệu phân phối:

user_id
timestamp
location
product

Giải thích: Khi chọn shard key "user_id", dữ liệu được phân phối đều giữa các shard

2

Mô phỏng truy vấn

Nhập một truy vấn và xem nó được xử lý như thế nào:

> Chờ lệnh...

Kết quả trực quan sẽ hiển thị ở đây

3

Thiết kế kiến trúc của bạn

Xây dựng kiến trúc sharding cho ứng dụng của bạn:

Kết quả đề xuất kiến trúc của bạn sẽ xuất hiện ở đây sau khi bạn nhấp vào nút "Thiết kế".

Phân Tích Hiệu Suất Sharding

1

So sánh hiệu suất

Hiệu suất của kiến trúc không sharding vs có sharding:

2

Mô phỏng tải

Thử nghiệm với các mức tải khác nhau:

ThấpCao
Sử dụng thanh trượt để điều chỉnh
1,250
Truy vấn/giây
42ms
Độ trễ
65%
Sử dụng CPU
3

Mở rộng hệ thống

Thêm shard mới và xem hiệu suất thay đổi:

Câu Hỏi Thường Gặp (FAQ)

Shard là gì?

Một shard là một máy chủ hoặc một cụm máy chủ lưu trữ một phần dữ liệu của toàn bộ collection. Mỗi shard có thể là một replica set để đảm bảo tính sẵn sàng cao.

Shard key là gì và tại sao nó quan trọng?

Shard key là một trường hoặc một tập hợp các trường trong tài liệu được sử dụng để phân phối dữ liệu trên các shard. Việc chọn shard key tốt là rất quan trọng để đảm bảo dữ liệu được phân phối đều và hiệu suất truy vấn cao.

Chunk là gì?

Một chunk là một dải liên tục của các giá trị shard key. MongoDB chia dữ liệu thành các chunk và phân phối chúng trên các shard. Mỗi chunk có kích thước mặc định là 64MB.

Mongos là gì?

Mongos hoạt động như một bộ định tuyến truy vấn (query router), cung cấp một giao diện từ các ứng dụng khách đến cụm sharded. Ứng dụng không kết nối trực tiếp đến các shard mà kết nối đến Mongos, Mongos sẽ định tuyến truy vấn đến shard phù hợp.

Balancer (bộ cân bằng) là gì?

Balancer là một tiến trình nền chạy trong cụm sharded, có nhiệm vụ di chuyển các chunk giữa các shard để đảm bảo dữ liệu được phân phối đều. Nó hoạt động tự động để ngăn chặn một shard bị quá tải trong khi các shard khác còn trống.

Điều gì xảy ra khi một shard bị lỗi?

Để đảm bảo tính sẵn sàng cao, mỗi shard thường được triển khai dưới dạng một replica set (tập hợp bản sao). Nếu một node chính (primary) trong shard bị lỗi, một trong các node phụ (secondary) sẽ tự động được bầu làm node chính mới, đảm bảo cụm vẫn hoạt động mà không bị gián đoạn.

Làm thế nào để chọn một Shard Key tốt?

Một shard key tốt có ba đặc điểm chính:

  • Cardinality cao: Có nhiều giá trị duy nhất, giúp phân phối dữ liệu trên nhiều chunk.
  • Tần suất thay đổi thấp: Giá trị của shard key không nên thay đổi thường xuyên.
  • Không đơn điệu tăng/giảm: Tránh các key luôn tăng (như timestamp hoặc `_id` mặc định) vì chúng có thể gây ra "hot shard", tức là tất cả các lượt ghi mới đều đi vào cùng một shard.
×

Chi Tiết Chunk

ID:

Phạm vi (Range):

Shard hiện tại:

Số lượng tài liệu (ước tính):