Khóa phân đoạn băm MongoDB

Những gì tôi hiểu rằng chỉ cần sử dụng {ts. 1} vì khóa phân đoạn sẽ trợ giúp trong truy vấn của tôi nhưng sẽ không trợ giúp khi chèn

Vì tôi cũng đang chèn hơn 1000 tài liệu mỗi phút nên tôi cũng cần các phần chèn được phân phối tốt

Do đó, hàm băm [ts] là tùy chọn tốt hơn ở đây, nhưng sau đó các truy vấn phạm vi của tôi sẽ không nhanh, đây cũng là thứ tôi cần

Vì vậy, những gì tôi hiểu từ đề xuất của bạn, tốt hơn là sử dụng khóa ghép có khóa phân đoạn của tôi

Vì vậy, một khóa như {ts. 1, pn. 1, không. 1, chị. 1} sẽ là cách để thực hiện?

Vì hầu hết các thuộc tính này sẽ được sử dụng với ts khi truy vấn dữ liệu

Ngoài ra, vui lòng cho tôi biết nếu trường hợp này xảy ra thì các thuộc tính khác như [pn, un, ss] có cần phải có trong tất cả các tài liệu không

Điều gì sẽ xảy ra nếu chúng bị thiếu [có thể] trong một số tài liệu. Vì vậy, khi chúng bị thiếu và vẫn được sử dụng như một phần của khóa phân đoạn phức hợp, chúng có gây ra sự cố nào không?

Vì vậy, vâng, ban đầu tôi dự định chỉ sử dụng ts làm khóa phân đoạn, nhưng có vẻ như đây không phải là một tùy chọn ở đây

Bạn chọn khóa phân đoạn khi phân đoạn bộ sưu tập. Mỗi bản ghi chứa một khóa phân đoạn và khóa phân đoạn là một trường được lập chỉ mục hoặc các trường phức hợp được lập chỉ mục. Cơ sở dữ liệu MongoDB phân phối dữ liệu theo các khối khác nhau theo khóa phân đoạn và phân phối các khối đồng đều giữa các phân đoạn. Để phân chia khối dữ liệu theo khóa phân đoạn, cơ sở dữ liệu MongoDB sử dụng hai phương thức phân đoạn. sharding dựa trên phạm vi và sharding băm

Bảng 1 Phân loại khóa Shard

Loại khóa mảnh

Sự miêu tả

Kịch bản ứng dụng

Bảo vệ dựa trên phạm vi

Phân đoạn dựa trên phạm vi liên quan đến việc chia dữ liệu thành các phạm vi liền kề được xác định bởi các giá trị khóa phân đoạn. Bảo vệ dựa trên phạm vi là phương pháp bảo vệ mặc định nếu không có tùy chọn nào khác được chỉ định

Điều này cho phép các truy vấn hiệu quả khi đọc các tài liệu đích trong một phạm vi liền kề. Tuyến phân phối xác định đoạn dữ liệu nào lưu trữ dữ liệu được yêu cầu và chuyển tiếp yêu cầu đến phân đoạn tương ứng

Nên sử dụng khi khóa phân đoạn có số lượng thẻ cao với tần số thấp và giá trị khóa phân đoạn không thay đổi đơn điệu

băm nhỏ

Bảo vệ băm đã băm sử dụng chỉ mục đã băm để phân vùng dữ liệu trên cụm được chia sẻ của bạn và để tạo các khối

Phân đoạn băm cung cấp phân phối dữ liệu đồng đều hơn trên cụm phân đoạn Giá trị băm cho phép dữ liệu được phân phối ngẫu nhiên trong mỗi đoạn và do đó được phân phối ngẫu nhiên trong các phân đoạn khác nhau

Nếu các giá trị khóa phân đoạn có số lượng thẻ cao hoặc thay đổi đơn điệu hoặc có số lượng lớn các giá trị khác nhau, thì phân đoạn băm là một lựa chọn lý tưởng

Khi bạn phân đoạn một bộ sưu tập, khóa phân đoạn và các giá trị của khóa phân đoạn là bất biến. Nếu bạn cần sửa đổi khóa phân đoạn của tài liệu, bạn phải xóa tài liệu đó. Sau đó sửa đổi khóa phân đoạn và chèn lại tài liệu

Khóa phân đoạn không hỗ trợ chỉ mục mảng, chỉ mục văn bản, chỉ mục địa lý và chỉ mục không gian

Sharding dựa trên phạm vi

  1. Chạy lệnh sau để kích hoạt cơ sở dữ liệu sharding

    sh. enableSharding [cơ sở dữ liệu]

    cơ sở dữ liệu cho biết cơ sở dữ liệu đã kích hoạt bộ sưu tập phân mảnh

  2. Định cấu hình khóa phân đoạn của bộ sưu tập

    sh. shardCollection[không gian tên, khóa]

    • không gian tên bao gồm một chuỗi. chỉ định không gian tên đầy đủ của bộ sưu tập đích
    • key chỉ ra chỉ mục cho shard key

    • Nếu bộ sưu tập trống, hãy bỏ qua bước này vì chỉ mục trên khóa phân đoạn có thể được tạo tự động

      sh. shardCollection[]

    • Nếu bộ sưu tập không trống, hãy tạo khóa chỉ mục. Sau đó, chạy lệnh sau để đặt khóa phân đoạn

      sh. shardCollection[]

Sharding băm

  1. Chạy lệnh sau để kích hoạt cơ sở dữ liệu sharding

    sh. enableSharding [cơ sở dữ liệu]

    cơ sở dữ liệu cho biết cơ sở dữ liệu đã kích hoạt bộ sưu tập phân mảnh

  2. Đặt các khóa phân đoạn được băm

    sh. shardCollection[". ", {. "đã băm" }, sai, {numInitialChunks. Số khối cấu hình sẵn}]

    Giá trị của numInitialChunks được tính như sau. db. thu thập. thống kê[]. kích thước / 10*1024*1024*1024

    Nếu bộ sưu tập chứa dữ liệu, hãy chạy lệnh sau để tạo chỉ mục được băm cho khóa được băm

    Sharding là một phương pháp phân phối dữ liệu trên nhiều máy. MongoDB sử dụng sharding để hỗ trợ triển khai với tập dữ liệu rất lớn và hoạt động có thông lượng cao

    Ghi chú. MongoDB hỗ trợ mở rộng theo chiều ngang thông qua sharding

    Ghi chú. MongoDB phân đoạn dữ liệu ở cấp bộ sưu tập, phân phối dữ liệu thu thập trên các phân đoạn trong cụm

    Cụm phân mảnh

    Một cụm phân mảnh MongoDB bao gồm các thành phần sau.
    phân đoạn. Mỗi phân đoạn chứa một tập hợp con của dữ liệu được phân đoạn. Mỗi phân đoạn có thể được triển khai dưới dạng một bộ bản sao.
    mông cái. Mongos hoạt động như một bộ định tuyến truy vấn, cung cấp giao diện giữa các ứng dụng khách và cụm phân đoạn.
    máy chủ cấu hình. Máy chủ cấu hình lưu trữ siêu dữ liệu và cài đặt cấu hình cho cụm. Kể từ MongoDB 3. 4, máy chủ cấu hình phải được triển khai dưới dạng bộ bản sao.

    Khóa phân đoạn
    Để phân phối tài liệu trong bộ sưu tập, MongoDB phân vùng bộ sưu tập bằng khóa phân đoạn. Khóa phân đoạn bao gồm một trường bất biến hoặc các trường tồn tại trong mọi tài liệu trong bộ sưu tập đích.
    Bạn chọn khóa phân đoạn khi phân đoạn một bộ sưu tập. Không thể thay đổi lựa chọn khóa phân đoạn sau khi phân đoạn. Một bộ sưu tập phân đoạn chỉ có thể có một khóa phân đoạn.

    Khối
    Phân vùng MongoDB đã phân mảnh dữ liệu thành các khối. Mỗi đoạn có một phạm vi trên bao gồm thấp hơn và độc quyền dựa trên khóa phân đoạn.

    Phân phối khối cân bằng và đồng đều
    Trong nỗ lực đạt được sự phân phối khối đồng đều trên tất cả các phân đoạn trong cụm, một bộ cân bằng sẽ chạy trong nền để di chuyển các khối trên các phân đoạn.

    Kết nối với cụm phân đoạn
    Bạn phải kết nối với bộ định tuyến mongos để tương tác với bất kỳ bộ sưu tập nào trong cụm phân đoạn. Khách hàng không bao giờ được kết nối với một phân đoạn duy nhất để thực hiện các thao tác đọc hoặc ghi.

    Chiến lược phân mảnh
    MongoDB hỗ trợ hai chiến lược phân mảnh để phân phối dữ liệu trên các cụm phân mảnh.
    1. Hashing Sharding
    Shashed Sharding liên quan đến việc tính toán giá trị băm của trường khóa phân đoạn. Sau đó, mỗi đoạn được gán một phạm vi dựa trên các giá trị khóa phân đoạn được băm.
    Lưu ý. MongoDB tự động tính toán giá trị băm khi giải quyết các truy vấn bằng chỉ mục được băm. Các ứng dụng không cần tính toán giá trị băm.

    2. Phân đoạn theo phạm vi
    Phân đoạn theo phạm vi liên quan đến việc chia dữ liệu thành các phạm vi dựa trên các giá trị của khóa phân đoạn. Mỗi đoạn sau đó được gán một phạm vi dựa trên các giá trị khóa phân đoạn.

    Chọn khóa phân đoạn
    Việc lựa chọn khóa phân đoạn ảnh hưởng đến việc tạo và phân phối khối trên các phân đoạn có sẵn. Điều này ảnh hưởng đến hiệu quả tổng thể và hiệu suất của các hoạt động trong cụm phân đoạn.

    1. Số lượng khóa phân đoạn
    Số lượng khóa của khóa phân đoạn xác định số khối tối đa mà bộ cân bằng có thể tạo. Điều này có thể làm giảm hoặc loại bỏ hiệu quả của tỷ lệ ngang trong cụm.

    Một giá trị khóa phân đoạn duy nhất có thể tồn tại không quá một đoạn tại bất kỳ thời điểm nào. Nếu khóa phân đoạn có số lượng là 4, thì không thể có nhiều hơn 4 khối trong cụm phân đoạn, mỗi khối lưu trữ một giá trị khóa phân đoạn duy nhất. Điều này cũng hạn chế số lượng phân đoạn hiệu quả trong cụm thành 4 — việc thêm các phân đoạn bổ sung sẽ không mang lại bất kỳ lợi ích nào

    2. Tần suất của khóa phân đoạn
    Hãy xem xét một tập hợp đại diện cho phạm vi giá trị của khóa phân đoạn — tần suất của khóa phân đoạn biểu thị tần suất xuất hiện của một giá trị nhất định trong dữ liệu. Nếu phần lớn các tài liệu chỉ chứa một tập hợp con của các giá trị đó, thì các khối lưu trữ các tài liệu đó sẽ trở thành nút cổ chai trong cụm.

    Ghi chú. Cẩn thận với các khóa phân đoạn thay đổi đơn điệu
    Khóa phân đoạn trên một giá trị tăng hoặc giảm đơn điệu có nhiều khả năng phân phối các phần chèn vào một phân đoạn duy nhất trong cụm.

    Điều này xảy ra bởi vì mỗi cụm có một đoạn ghi lại một phạm vi có giới hạn trên của maxKey. maxKey luôn so sánh cao hơn tất cả các giá trị khác. Tương tự, có một đoạn ghi lại một phạm vi có giới hạn dưới của monKey. minKey luôn so sánh thấp hơn tất cả các giá trị khác

    Nếu giá trị khóa phân đoạn luôn tăng, tất cả các phần chèn mới được chuyển đến đoạn có maxKey làm giới hạn trên. Nếu giá trị khóa phân đoạn luôn giảm, tất cả các phần chèn mới được chuyển đến đoạn có minKey làm giới hạn dưới. Phân đoạn chứa đoạn đó trở thành nút cổ chai cho các thao tác ghi

    Khóa phân đoạn băm trong MongoDB là gì?

    Phân đoạn dựa trên phân đoạn được băm sử dụng chỉ mục được băm của một trường làm khóa phân đoạn để phân vùng dữ liệu trên cụm được phân đoạn của bạn . Sử dụng khóa phân đoạn được băm để phân đoạn bộ sưu tập dẫn đến phân phối dữ liệu đồng đều hơn.

    Làm cách nào để tạo khóa phân đoạn trong MongoDB?

    Bắt đầu từ MongoDB 4. 4, bạn có thể sử dụng lệnh tweakCollectionShardKey để tinh chỉnh khóa phân đoạn của bộ sưu tập . Lệnh tweakCollectionShardKey thêm trường hậu tố hoặc các trường vào khóa hiện có để tạo khóa phân đoạn mới.

    Bạn có thể thay đổi khóa phân đoạn sau khi bộ sưu tập được phân đoạn không?

    Để giải quyết những vấn đề này, MongoDB cho phép bạn thay đổi khóa phân đoạn của mình . Bắt đầu từ MongoDB 5. 0, bạn có thể phân chia lại bộ sưu tập bằng cách thay đổi khóa phân đoạn của bộ sưu tập. Bắt đầu từ MongoDB 4. 4, bạn có thể tinh chỉnh khóa phân đoạn bằng cách thêm trường hậu tố hoặc các trường vào khóa phân đoạn hiện có.

    Khóa shard có phải là duy nhất không?

    Các cột khóa phân đoạn phải càng độc đáo càng tốt

Chủ Đề