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- 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 - Đị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- 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 - Đặ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 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 xác định việc phân phối các tài liệu của bộ sưu tập giữa các phân đoạn của cụm Cụ thể, MongoDB chia khoảng giá trị khóa phân đoạn (hoặc giá trị khóa phân đoạn được băm) thành các phạm vi giá trị khóa phân đoạn không trùng lặp (hoặc giá trị khóa phân đoạn được băm). Mỗi phạm vi được liên kết với một đoạn và MongoDB cố gắng phân phối các đoạn đồng đều giữa các phân đoạn trong cụm Khóa phân đoạn có mối quan hệ trực tiếp với hiệu quả của phân phối khối. Nhìn thấy Chọn khóa phân đoạnThông số kỹ thuật chính của ShardBạn phải chỉ định khóa phân đoạn khi phân đoạn bộ sưu tập. Bạn có thể sử dụng phương thức shell db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 2 db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 3 để phân tách bộ sưu tậpsh.shardCollection(<namespace>, <key>) // Optional parameters omitted
db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 4
Specify the full namespace of the collection (i.e. ".") to shard. db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 5
Chỉ định một tài liệu db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 6 nơi
db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 7 biểu thị phân đoạn dựa trên phạm vidb.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 8 biểu thị sharding băm
Ghi chúCác trường và giá trị khóa của Shardtồn tại Bắt đầu từ phiên bản 4. 4, tài liệu trong bộ sưu tập phân đoạn có thể thiếu các trường khóa phân đoạn. Khóa phân đoạn bị thiếu nằm trong cùng phạm vi với khóa phân đoạn có giá trị db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 0. Xem Thiếu khóa Shard. Trong phiên bản 4. 2 trở về trước, các trường khóa phân đoạn phải tồn tại trong mọi tài liệu đối với bộ sưu tập được phân đoạn Cập nhật giá trị của trườngBắt đầu từ MongoDB 4. 2, bạn có thể cập nhật giá trị khóa phân đoạn của tài liệu trừ khi trường khóa phân đoạn là trường db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 1 bất biến. Trước MongoDB 4. 2, giá trị trường khóa phân đoạn của tài liệu là không thay đổiĐể biết chi tiết về cách cập nhật khóa phân đoạn, hãy xem Thay đổi giá trị khóa phân đoạn của tài liệu. Để biết thêm thông tin về phương pháp sharding, xem db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 3Tinh chỉnh khóa ShardBắt đầu từ MongoDB 4. 4, bạn có thể sử dụng db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 3 để tinh chỉnh khóa phân đoạn của bộ sưu tập. db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 3 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ớiVí dụ: bạn có thể có bộ sưu tập db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 5 hiện có với khóa phân đoạn db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 6. Bạn có thể thay đổi khóa phân đoạn bằng cách thêm trường hậu tố db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 7 vào khóa phân đoạn để db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 8 trở thành khóa phân đoạn mới. Để biết thêm thông tin, hãy xem lệnh db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 3Việc tinh chỉnh khóa phân đoạn của bộ sưu tập cho phép phân phối dữ liệu chi tiết hơn và có thể giải quyết các tình huống trong đó khóa hiện có dẫn đến khối lượng lớn (i. e. không thể chia được) khối do không đủ lực lượng Trong MongoDB 4. 2 trở về trước, không thể thay đổi lựa chọn khóa phân đoạn sau khi phân đoạn Chỉ mục chính của ShardTất cả các bộ sưu tập được phân đoạn phải có một chỉ mục hỗ trợ khóa phân đoạn; . e. chỉ mục có thể là một chỉ mục trên khóa phân đoạn hoặc chỉ mục tổng hợp trong đó khóa phân đoạn là tiền tố của chỉ mục Nếu bộ sưu tập trống, db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 3 sẽ tạo chỉ mục trên khóa phân đoạn nếu chỉ mục đó chưa tồn tạiNếu bộ sưu tập không trống, bạn phải tạo chỉ mục trước khi sử dụng db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 3
Nếu bạn đánh rơi chỉ mục hợp lệ cuối cùng cho khóa phân đoạn, hãy khôi phục bằng cách tạo lại chỉ mục chỉ trên khóa phân đoạn Chỉ mục duy nhấtMongoDB có thể thực thi ràng buộc về tính duy nhất đối với chỉ mục khóa phân đoạn phạm vi. Thông qua việc sử dụng một chỉ mục duy nhất trên khóa phân đoạn, MongoDB thực thi tính duy nhất trên toàn bộ tổ hợp phím chứ không phải các thành phần riêng lẻ của khóa phân đoạn Đối với một bộ sưu tập được phân đoạn theo phạm vi, chỉ các chỉ mục sau có thể là duy nhất chỉ mục trên khóa phân đoạn một chỉ mục phức hợp trong đó khóa phân đoạn là tiền tố chỉ mục db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 1 mặc định; Quan trọngTính duy nhất và chỉ số _idNếu trường db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 1 không phải là khóa phân đoạn hoặc tiền tố của khóa phân đoạn, thì chỉ mục db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 1 chỉ thực thi ràng buộc về tính duy nhất trên mỗi phân đoạn chứ không phải trên các phân đoạnVí dụ: hãy xem xét một bộ sưu tập phân đoạn (với khóa phân đoạn db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 57) bao gồm hai phân đoạn A và B. Vì khóa db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 1 không phải là một phần của khóa phân đoạn, bộ sưu tập có thể có một tài liệu có giá trị db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 1 db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 7 trong phân đoạn A và một tài liệu khác có giá trị db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 1 db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 7 trong phân đoạn BNếu trường db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 1 không phải là khóa phân đoạn cũng không phải là tiền tố của khóa phân đoạn, thì MongoDB mong muốn các ứng dụng thực thi tính duy nhất của các giá trị db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 1 trên các phân đoạn
Các ràng buộc chỉ mục duy nhất có nghĩa là Đối với bộ sưu tập sắp được phân đoạn, bạn không thể phân đoạn bộ sưu tập nếu bộ sưu tập có các chỉ mục duy nhất khác Đối với một bộ sưu tập đã được chia nhỏ, bạn không thể tạo các chỉ mục duy nhất trên các trường khác Chỉ mục duy nhất lưu trữ giá trị null cho tài liệu thiếu trường được lập chỉ mục; . Để biết thêm thông tin, hãy xem Chỉ mục duy nhất và Trường bị thiếu
Để thực thi tính duy nhất trên các giá trị khóa phân đoạn, hãy chuyển tham số db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 26 là db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 27 cho phương thức db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 3Nếu bộ sưu tập trống, db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 3 sẽ tạo chỉ mục duy nhất trên khóa phân đoạn nếu chỉ mục đó chưa tồn tạiNếu bộ sưu tập không trống, bạn phải tạo chỉ mục trước khi sử dụng db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 3
Mặc dù bạn có thể có một chỉ mục hợp chất duy nhất trong đó khóa phân đoạn là tiền tố, nhưng nếu sử dụng tham số db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 26, bộ sưu tập phải có một chỉ mục duy nhất nằm trên khóa phân đoạnBạn không thể chỉ định một ràng buộc duy nhất trên chỉ mục được băm Chọn khóa phân đoạnViệc lựa chọn khóa phân đoạn ảnh hưởng đến việc tạo và phân phối các 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 Khóa phân đoạn lý tưởng cho phép MongoDB phân phối tài liệu đồng đều trên toàn cụm. Xem thêm chiến lược sharding Tối thiểu, hãy xem xét hậu quả của số lượng , tần suất, and monotonicity of a potential shard key. Ghi chúBắt đầu từ MongoDB 4. 4, bạn có thể sử dụng db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 3 để tinh chỉnh khóa phân đoạn của bộ sưu tập. db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 3 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ớiTrong MongoDB 4. 2 trở về trước, khi bạn phân đoạn một bộ sưu tập, việc lựa chọn khóa phân đoạn là không thay đổi
Những hạn chếĐể biết các hạn chế đối với khóa phân đoạn, hãy xem Hạn chế của khóa phân đoạn Kích thước bộ sưu tậpKhi phân đoạn bộ sưu tập không trống, khóa phân đoạn có thể giới hạn kích thước bộ sưu tập được hỗ trợ tối đa chỉ cho thao tác phân đoạn ban đầu. Xem Sharding Kích thước dữ liệu bộ sưu tập hiện có Quan trọngMột bộ sưu tập được phân đoạn có thể phát triển thành bất kỳ kích thước nào sau khi phân đoạn thành công Shard Key CardinalitySố lượng thẻ 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 một khóa phân đoạn có số lượng thẻ là ________ 334, thì không thể có nhiều hơn ________ 334 khối trong cụm được 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 db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 34 - 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àoHình ảnh sau đây minh họa một cụm phân đoạn sử dụng trường db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 37 làm khóa phân đoạn. Nếu db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 37 có số lượng thẻ thấp, thì việc phân phối các phần chèn có thể giống như sauCụm trong ví dụ này sẽ không chia tỷ lệ theo chiều ngang, vì quá trình ghi đến sẽ chỉ định tuyến đến một tập hợp con các phân đoạn Việc chọn một khóa phân đoạn có số lượng thẻ cao không tự nó đảm bảo phân phối dữ liệu đồng đều trên cụm phân đoạn. tần suất và tính đơn điệu của khóa phân đoạn cũng góp phần phân phối dữ liệu. Cân nhắc từng yếu tố khi chọn khóa phân đoạn. Nếu mô hình dữ liệu của bạn yêu cầu phân đoạn trên khóa có lực lượng thấp, hãy cân nhắc sử dụng chỉ mục tổng hợp bằng cách sử dụng trường có lực lượng tương đối cao hơn Tần suất khóa phân mảnhXem xét một tập hợp đại diện cho phạm vi của các giá trị khóa phân đoạn - db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 39 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. Hơn nữa, khi những khối đó phát triển, chúng có thể trở thành những khối không thể chia được vì chúng không thể tách ra được nữa. Điều này làm giảm hoặc loại bỏ hiệu quả của tỷ lệ ngang trong cụmHình ảnh sau đây minh họa một cụm phân đoạn sử dụng trường db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 37 làm khóa phân đoạn. Nếu một tập hợp con các giá trị cho db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 37 xảy ra với tần suất cao, phân phối của các phần chèn có thể giống như sauViệc chọn khóa phân đoạn có tần suất thấp tự nó không đảm bảo phân phối dữ liệu đồng đều trên cụm phân đoạn. tính chính xác và tính đơn điệu của khóa phân đoạn cũng góp phần phân phối dữ liệu. Cân nhắc từng yếu tố khi chọn khóa phân đoạn. Nếu mô hình dữ liệu của bạn yêu cầu phân đoạn trên khóa có giá trị tần suất cao, hãy cân nhắc sử dụng chỉ mục tổng hợp sử dụng giá trị tần số thấp hoặc duy nhất Độ đơn điệu của khóa mảnhKhó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. db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 42 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. db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 43 luôn so sánh thấp hơn tất cả các giá trị khácNếu giá trị khóa phân đoạn luôn tăng, tất cả các phần chèn mới sẽ được định tuyến đến đoạn có db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 42 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 sẽ được định tuyến đến đoạn có db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 43 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 ghiHình ảnh sau đây minh họa một cụm phân đoạn sử dụng trường db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 37 làm khóa phân đoạn. Nếu các giá trị cho db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 37 tăng dần đều, phân phối các phần chèn có thể trông giống như sauNếu giá trị khóa phân đoạn giảm đơn điệu, thì thay vào đó, tất cả các phần chèn sẽ định tuyến đến db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 48Việc chọn một khóa phân đoạn không thay đổi đơn điệu, tự nó không đảm bảo phân phối dữ liệu đồng đều trên cụm phân đoạn. số lượng và tần suất của khóa phân đoạn cũng góp phần phân phối dữ liệu. Cân nhắc từng yếu tố khi chọn khóa phân đoạn. Nếu mô hình dữ liệu của bạn yêu cầu phân đoạn trên một khóa thay đổi đơn điệu, hãy cân nhắc sử dụng Phân đoạn băm Thay đổi giá trị khóa phân đoạn của tài liệuGhi chúKhi cập nhật giá trị khóa phân đoạnBạn phải chạy trên một db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 49. Không thực hiện thao tác trực tiếp trên phân đoạnBạn phải chạy trong giao dịch hoặc dưới dạng ghi có thể thử lại Bạn phải bao gồm một điều kiện bình đẳng trên khóa phân đoạn đầy đủ trong bộ lọc truy vấn. Ví dụ: nếu một thư bộ sưu tập sử dụng db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 50 làm khóa phân đoạn, thì để cập nhật khóa phân đoạn cho tài liệu, bạn phải đưa db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 51 vào bộ lọc truy vấn. Bạn có thể bao gồm các trường bổ sung trong truy vấn nếu thích hợp
Xem thêm lệnh/phương thức ghi cụ thể để biết các yêu cầu bổ sung dành riêng cho hoạt động khi chạy với bộ sưu tập được phân đoạn Bắt đầu từ MongoDB 4. 2, bạn có thể cập nhật giá trị khóa phân đoạn của tài liệu trừ khi trường khóa phân đoạn là trường db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 1 bất biến. Để cập nhật, hãy sử dụng các thao tác sau để cập nhật giá trị khóa phân đoạn của tài liệuChỉ huy Phương pháp cập nhật với db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 53 db. thu thập. thay thếOne() db. thu thập. cập nhậtOne() db. thu thập. cập nhật () với db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 53
findAndModify db. thu thập. findOneAndReplace() db. thu thập. findOneAndUpdate() db. thu thập. findAndModify()
db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 55
db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 56Nếu sửa đổi khóa phân đoạn dẫn đến việc di chuyển tài liệu sang một phân đoạn khác, thì bạn không thể chỉ định nhiều hơn một sửa đổi khóa phân đoạn trong thao tác hàng loạt; . e. kích thước lô 1 Nếu sửa đổi khóa phân đoạn không dẫn đến việc di chuyển tài liệu sang phân đoạn khác, bạn có thể chỉ định sửa đổi nhiều khóa phân đoạn trong thao tác hàng loạt Cảnh báoBắt đầu từ phiên bản 4. 4, tài liệu trong bộ sưu tập phân đoạn có thể thiếu các trường khóa phân đoạn. Thận trọng để tránh vô tình xóa khóa phân đoạn khi thay đổi giá trị khóa phân đoạn của tài liệu Thiếu khóa phân mảnhBắt đầu từ phiên bản 4. 4, tài liệu trong bộ sưu tập phân đoạn có thể thiếu các trường khóa phân đoạn Phạm vi khối và các trường khóa phân đoạn bị thiếuCác khóa phân đoạn bị thiếu nằm trong cùng phạm vi khối với các khóa phân đoạn có giá trị null. Ví dụ: nếu khóa phân đoạn nằm trên các trường db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 57, thìTài liệu bị thiếu Shard Key Rơi vào cùng phạm vi với db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 58
db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 59
db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 60
db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 61
db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 62
db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 63
Thao tác đọc/ghi và các trường khóa phân đoạn bị thiếuĐể nhắm mục tiêu các tài liệu có trường khóa phân đoạn bị thiếu, bạn có thể sử dụng điều kiện lọc db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 64 trên các trường khóa phân đoạn. Ví dụ: nếu khóa phân đoạn nằm trên các trường db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 57, để tìm các tài liệu có các trường khóa phân đoạn bị thiếudb.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } )
Nếu bạn chỉ định một điều kiện bộ lọc đối sánh đẳng thức null (e. g. db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 66), bộ lọc khớp với cả những tài liệu có trường khóa phân đoạn bị thiếu và những tài liệu có trường khóa phân đoạn được đặt thành db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 0Một số thao tác ghi, chẳng hạn như ghi với thông số kỹ thuật của db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 68, yêu cầu khớp đẳng thức trên khóa phân đoạn. Trong những trường hợp đó, để nhắm mục tiêu tài liệu thiếu khóa phân đoạn, hãy bao gồm một điều kiện lọc khác ngoài đối sánh đẳng thức db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 0. Ví dụdb.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 5Đặt các trường khóa phân đoạn bị thiếuĐể đặt các trường khóa phân đoạn bị thiếu (khác với việc thay đổi giá trị của trường khóa phân đoạn hiện có ), bạn có thể sử dụng cách sau . Chỉ huy Phương pháp Sự miêu tả cập nhật với db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 71
db. thu thập. cập nhật() với db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 71
Chỉ có thể được sử dụng để đặt giá trị khóa bị thiếu thành db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 0
Có thể được thực hiện bên trong hoặc bên ngoài một giao dịch Có thể được thực hiện dưới dạng ghi có thể thử lại hoặc không Đối với các yêu cầu bổ sung, hãy tham khảo lệnh/phương thức cụ thể cập nhật với db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 53
db. thu thập. thay thếOne() db. thu thập. cập nhậtOne() db. thu thập. cập nhật() với db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 53
Có thể được sử dụng để đặt giá trị khóa bị thiếu thành db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } ) 0 hoặc bất kỳ giá trị nào khác
Để đặt thành giá trị không phải ____10, phải được thực hiện bên trong giao dịch hoặc dưới dạng ghi có thể thử lại
Làm cách nào để cập nhật giá trị khóa trong MongoDB?
và để cập nhật các giá trị, hãy sử dụng toán tử $set, db. tên bộ sưu tập. cập nhật( { _id. 100 }, { $set. { key1. giá trị1, khóa2. giá trị2,. } } )
Khóa phân đoạn mặc định trong MongoDB là gì?
Khóa phân đoạn là một trường được lập chỉ mục duy nhất hoặc nhiều trường được bao phủ bởi một chỉ mục phức hợp xác định phân phối tài liệu của bộ sưu tập giữa các phân đoạn của cụm.
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
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.
|