Mongodb cluster là gì
Sharding hay Shard Collection trong monogoDB là gì ?
Khi thiết kế database đối với một hệ thống lớn , đòi hỏi thông lượng cao luôn là bài toán khó . Nào là tùy thuộc vào loại dữ liệu như nào, kiến trúc app ra sao hay nên chọn loại database nào cho phù hợp ,... rất nhiều yếu tố chúng ta cần phải cân nhắc . Trong bài viết này mình muốn chia sẻ về Sharding một phương pháp để phân phối dữ liệu trên nhiều máy mà MongoDB sử dụng để hỗ trợ triển khai với những app dữ liệu rất lớn và đòi hỏi thông lượng cao. Show Mở đầuCác hệ thống cơ sở dữ liệu với các tập dữ liệu lớn hoặc các ứng dụng đòi hỏi thông lượng cao có thể thách thức khả năng của một máy chủ. Ví dụ ứng dụng chat có một lượng lớn người dùng , hơn nữa người dùng luôn đòi hỏi việc gửi và nhận tin nhắn của họ phải realtime . Lúc đó nhu cầu truy vấn cao đòi hỏi một lượng lớn RAM và CPU mà chắc chắn 1 máy chủ sẽ khó lòng đáp ứng được . Sẽ có 2 giải pháp đối với các ứng dụng kiểu này đó là : mở rộng theo chiều ngang ( horizontal scaling ) và mở rộng theo chiều dọc ( vertical scaling )
MongoDB hỗ trợ scale theo chiều ngang thông qua sharding. Và đây cũng là những gì mình sẽ giới thiệu thông qua bài viết này . Sharded ClusterMongoDB sharded cluster sẽ gồm các thành phần :
MongoDB phân chia dữ liệu ở mức collection và phân phối chúng trong các shard ở trên các cluster Shard KeysMongoDB sử dụng shard key để phân phối các collections's documents trên các shard. Shard key bao gồm một hoặc nhiều trường tồn tại trong mọi document trong collection cần truy vấn. Bạn phải chọn shard key khi sharding một collection. Việc lựa chọn shard key không thể thay đổi sau khi sharding. Một sharded collection có thể chỉ có một shard key duy nhất . Để tìm hiểu thêm về cấu hình shard key hình minh họa vs shard key là x Việc lựa chọn shard key ảnh hưởng đến hiệu suất, hiệu quả cũng như khả năng mở rộng của database. Một cluster với phần cứng và infrastructure tốt nhất vẫn có thể bị ngẽn bởi việc lựa chọn shard key không hiệu quả. Ưu điểm của việc shardingReads / WritesĐối với truy vấn kèm theo shard key mongos có thể target đến một shard cụ thể .Việc target này chắc chắn sẽ hiệu quả hơn việc truy vấn tất cả rồi . Khả năng lưu trữViệc sử dụng shards trên cluster cho phép mỗi shard chứa một tập hợp con của dữ liệu tổng . Khi dữ liệu lớn lên thì việc thêm các shards sẽ tăng khả năng lưu trữ của cluster Tính sẵn sàng caoViệc đọc ghi vẫn sẽ ổn cho dù có vài shard bị down vì mỗi máy cũng sao lưu các shard của các máy khác và chúng ta vẫn có thể đọc ghi đc . Các chú ý trước khi sharding
Sharded và Non-Sharded CollectionsMột database có thể bao gồ cả sharded và unsharded collections .Sharded collection thì chia và phân phối trên các cluster. Unsharded collecton chỉ được lưu ở một shard chính ( mỗi db đều có 1 shard chính ) Từ app connect tới db chúng ta phải thông qua mongos để tương tác vs các sharded và unsharded colleciton . Chiến lược ShardingMongoDB hỗ trợ 2 cách đó là Hashed Sharding và Ranged Sharding : Hashed ShardingChúng ta sử dụng một hàm hash đối với shard key .Mỗi phần sau đó được gán một phạm vi dựa trên các giá trị hash của shard key . chú ý mongoDB hỗ trợ việc hash này rồi nên mình ko cần phải làm gì cả
Ranged ShardingRanged Sharding liên quan đến việc chia dữ liệu dựa theo giá trị của shard key. Mỗi chuck sau đó sẽ đc gán với một phạm vi Demo
Reference
|