Đây là bản tóm tắt hàng tuần về Soạn tin tức cho những thay đổi và cập nhật có thể giúp cuộc sống của bạn dễ dàng hơn. Trong phiên bản ngày 28 tháng 8 năm 2018 này, chúng tôi xem xét các vấn đề về số lượng kết nối với MongoDB. Và chúng tôi cũng duyệt qua các Bài báo soạn của tuần trước
Số lượng kết nối MongoDB
TL;DR. Nếu bạn chạy MongoDB và Node bằng trình điều khiển MongoDB Node chính thức, hãy cập nhật trình điều khiển của bạn lên phiên bản 3. 1. 3 hoặc muộn hơn
Gần đây, chúng tôi đã thấy các khách hàng sử dụng MongoDB có số lượng kết nối đạt đến giới hạn triển khai cơ sở dữ liệu của họ. Cập nhật nhanh về giới hạn kết nối. Các kết nối có thể tốn kém tùy thuộc vào cơ sở dữ liệu bạn đang xử lý. Bạn càng có nhiều kết nối, thì càng sử dụng nhiều bộ nhớ để xử lý các kết nối đó và bạn càng có ít bộ nhớ hơn để xử lý bộ dữ liệu đang hoạt động của cơ sở dữ liệu của mình
Đó là lý do tại sao có giới hạn - để ngăn bạn ăn hết bộ nhớ của mình trên các hoạt động không phải cơ sở dữ liệu. Ví dụ: trên Compose PostgreSQL, giới hạn kết nối bắt đầu ở 100 kết nối. Các kết nối ở đó chiếm một lượng lớn bộ nhớ nên chúng cần được hạn chế. Trên MongoDB, các kết nối nhẹ hơn rất nhiều và chúng tôi đặt giới hạn ở mức 5000. Đó là toàn bộ cơ sở dữ liệu, không phải cổng cụ thể. Vì vậy, với 5000 kết nối, sẽ rất khó để đạt đến giới hạn và nếu bạn làm như vậy, rất có thể đã có điều gì đó xảy ra với ứng dụng của bạn
Đó là lý do tại sao thật thú vị khi thấy một số khách hàng của Compose làm điều đó, đạt đến giới hạn 5000 kết nối rất nhanh. Nhóm hỗ trợ và nhà phát triển của chúng tôi đã xem xét vấn đề này và không thấy bất kỳ vấn đề nội bộ nào có thể gây ra những vấn đề này. Khách hàng đảm bảo với chúng tôi rằng họ đang cẩn thận tổng hợp các kết nối của họ, đây là một cách tuyệt vời để tránh mất kết nối. Vì vậy, chúng tôi tự hỏi liệu đó có phải là một vấn đề phổ biến với người lái xe không
Sau đó, chúng tôi đã xem vé này từ trình điều khiển MongoDB Node, một trong số các vấn đề liên quan đến tăng trưởng kết nối. Đây là một trong số các bản sửa lỗi trong phiên bản 3. 1. 3 được phát hành vào ngày 13 tháng 8. Chúng tôi hiện đã có báo cáo rằng việc áp dụng phiên bản này dường như loại bỏ được sự cố tăng kết nối nhanh chóng mà một số người dùng đang gặp phải
Vì vậy, nếu bạn đang gặp sự cố mất kết nối và bạn chạy MongoDB bằng trình điều khiển MongoDB Node, hãy cập nhật trình điều khiển của bạn lên phiên bản 3. 1. 4 - mới ra mắt và vui lòng kiểm tra lại ứng dụng của bạn. Chúng tôi hy vọng rằng thay đổi này sẽ giải quyết được sự cố nhưng chỉ cần gửi một dòng tới Hỗ trợ Soạn thư nếu bạn gặp bất kỳ điều gì tương tự
Soạn bài
Tuần trước, chúng tôi đã bắt đầu chu kỳ bảy ngày với một tin đáng chú ý là MongoDB Classic không còn khả dụng trên Compose. com. Sau đó, chúng tôi đã phát hành Redli, một ứng dụng khách của Redis và cập nhật tin tức
Kích thước tài liệu tối đa giúp đảm bảo rằng một tài liệu không thể sử dụng quá nhiều RAM hoặc quá nhiều băng thông trong quá trình truyền. Để lưu trữ tài liệu lớn hơn kích thước tối đa, MongoDB cung cấp GridFS API. Thấy
và tài liệu dành cho trình điều khiển trình điều khiểnđể biết thêm thông tin về GridFS. Độ sâu lồng nhau cho tài liệu BSONMongoDB hỗ trợ không quá 100 cấp độ lồng nhau cho. Mỗi đối tượng hoặc mảng thêm một mức
Hạn chế đặt tên
Sử dụng Case trong Tên cơ sở dữ liệuKhông dựa vào trường hợp để phân biệt giữa các cơ sở dữ liệu. Ví dụ: bạn không thể sử dụng hai cơ sở dữ liệu có tên như,
/\. "$
3 và /\. "$
4Sau khi bạn tạo cơ sở dữ liệu trong MongoDB, bạn phải sử dụng cách viết hoa nhất quán khi tham khảo cơ sở dữ liệu đó. Ví dụ: nếu bạn tạo cơ sở dữ liệu
/\. "$
3, không đề cập đến cơ sở dữ liệu đó bằng cách viết hoa thay thế, chẳng hạn như /\. "$
6 hoặc /\. "$
4Hạn chế về tên cơ sở dữ liệu cho WindowsĐối với triển khai MongoDB chạy trên Windows, tên cơ sở dữ liệu không được chứa bất kỳ ký tự nào sau đây
/\. "$*:|?
Ngoài ra, tên cơ sở dữ liệu không thể chứa ký tự null
Hạn chế về tên cơ sở dữ liệu cho hệ thống Unix và LinuxĐối với triển khai MongoDB chạy trên hệ thống Unix và Linux, tên cơ sở dữ liệu không được chứa bất kỳ ký tự nào sau đây
/\. "$
Ngoài ra, tên cơ sở dữ liệu không thể chứa ký tự null
Độ dài của tên cơ sở dữ liệuTên cơ sở dữ liệu không được để trống và phải có ít hơn 64 ký tự
Hạn chế về tên bộ sưu tậpTên bộ sưu tập phải bắt đầu bằng dấu gạch dưới hoặc ký tự chữ cái và không được
chứa
8/\. "$
là một chuỗi rỗng [e. g.
9]/\. "$
chứa ký tự null
bắt đầu bằng tiền tố
0. [Dành riêng cho sử dụng nội bộ. ]maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
Nếu tên bộ sưu tập của bạn bao gồm các ký tự đặc biệt, chẳng hạn như ký tự gạch dưới hoặc bắt đầu bằng số, thì để truy cập bộ sưu tập, hãy sử dụng phương thức trong hoặc một phương pháp tương tự cho trình điều khiển của bạn.
Độ dài không gian tên
Để đặt thành
3 trở lên, MongoDB tăng giới hạn cho các bộ sưu tập và chế độ xem chưa được phân đoạn lên 255 byte và 235 byte cho các bộ sưu tập được phân đoạn. Đối với bộ sưu tập hoặc chế độ xem, không gian tên bao gồm tên cơ sở dữ liệu, dấu phân cách dấu chấm [maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
4] và tên bộ sưu tập/chế độ xem [e. g.maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
5],maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
Để đặt thành
6 hoặc sớm hơn, độ dài tối đa của không gian tên bộ sưu tập và chế độ xem chưa được phân đoạn vẫn là 120 byte và 100 byte cho bộ sưu tập được phân đoạnmaxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
Tên trường không được chứa ký tự
7maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
Máy chủ cho phép lưu trữ các tên trường có chứa dấu chấm [_______9_______4] và ký hiệu đô la [
8]/\. "$
MongodB 5. 0 bổ sung hỗ trợ được cải thiện cho việc sử dụng [
8] và [/\. "$
4] trong tên trường. Có một số hạn chế. Xem để biết thêm chi tiếtmaxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
Tên trường
db.inventory.find[ {}, { "$instock.warehouse": 0, "$item": 0, "detail.$price": 1 } ] // Invalid starting in 4.4
2 được dành riêng để sử dụng làm khóa chính; . Nếu db.inventory.find[ {}, { "$instock.warehouse": 0, "$item": 0, "detail.$price": 1 } ] // Invalid starting in 4.4
2 chứa các trường con, tên trường con không được bắt đầu bằng ký hiệu [/\. "$
8]Cảnh báo đặt tên
Cảnh báo
Hãy thận trọng, các vấn đề được thảo luận trong phần này có thể dẫn đến mất hoặc hỏng dữ liệu
MongoDB không hỗ trợ tên trường trùng lặp
Ngôn ngữ truy vấn MongoDB không được xác định trên các tài liệu có tên trường trùng lặp. Trình tạo BSON có thể hỗ trợ tạo tài liệu BSON có tên trường trùng lặp. Mặc dù trình tạo BSON có thể không gây ra lỗi, nhưng việc chèn các tài liệu này vào MongoDB không được hỗ trợ ngay cả khi việc chèn thành công. Ví dụ: chèn tài liệu BSON có tên trường trùng lặp thông qua trình điều khiển MongoDB có thể khiến trình điều khiển âm thầm loại bỏ các giá trị trùng lặp trước khi chèn
Mối quan tâm về Nhập khẩu và Xuất khẩu Với Ký hiệu Đô la [_______0_______8] và Khoảng thời gian [maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
4]
maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
Bắt đầu từ MongoDB 5. 0, tên trường tài liệu có thể là tiền tố đô la [
/\. "$
8] và có thể chứa dấu chấm [maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
4]. Tuy nhiên, và có thể không hoạt động như mong đợi trong một số trường hợp với tên trường sử dụng các ký tự nàykhông thể phân biệt giữa các trình bao bọc kiểu và các trường có cùng tên với các trình bao bọc kiểu. Không sử dụng các định dạng JSON mở rộng trong các ngữ cảnh mà các biểu diễn BSON tương ứng có thể bao gồm các khóa có tiền tố đô la [
/\. "$
8]. Cơ chế này là một ngoại lệ đối với quy tắc chung nàyNgoài ra còn có những hạn chế về việc sử dụng và với dấu chấm [
maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
4] trong tên trường. Vì các tệp CSV sử dụng dấu chấm [maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
4] để biểu thị phân cấp dữ liệu nên dấu chấm [maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
4] trong tên trường sẽ bị hiểu sai là mức lồng nhauMất dữ liệu có thể xảy ra với các ký hiệu đô la [_______0_______8] và các khoảng thời gian [maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
4]
maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
Có khả năng mất dữ liệu nhỏ khi sử dụng tên trường có tiền tố đô la [_______0_______8] hoặc tên trường có chứa dấu chấm [
maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
4] nếu các tên trường này được sử dụng cùng với thao tác ghi không được xác nhận [ghi mối quan tâm db.inventory.find[ { }, { "": 0 } ] // Invalid starting in 4.4
1] trên các máy chủ cũ hơn MongoDB 5. 0Khi chạy các lệnh chèn, cập nhật và findAndModify, trình điều khiển 5. 0 tương thích loại bỏ các hạn chế về việc sử dụng các tài liệu có tên trường có tiền tố đô la [
/\. "$
8] hoặc có chứa dấu chấm [maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
4]. Các tên trường này đã tạo ra lỗi phía máy khách trong các phiên bản trình điều khiển trước đóCác hạn chế được loại bỏ bất kể phiên bản máy chủ mà trình điều khiển được kết nối với. Nếu một 5. 0 gửi tài liệu đến máy chủ cũ hơn, tài liệu sẽ bị từ chối mà không gửi lỗi
không gian tên
Độ dài không gian tênĐể đặt thành
3 trở lên, MongoDB tăng giới hạn cho các bộ sưu tập và chế độ xem chưa được phân đoạn lên 255 byte và 235 byte cho các bộ sưu tập được phân đoạn. Đối với bộ sưu tập hoặc chế độ xem, không gian tên bao gồm tên cơ sở dữ liệu, dấu phân cách dấu chấm [maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
4] và tên bộ sưu tập/chế độ xem [e. g.maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
5],maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
Để đặt thành
6 hoặc sớm hơn, độ dài tối đa của không gian tên bộ sưu tập và chế độ xem chưa được phân đoạn vẫn là 120 byte và 100 byte cho bộ sưu tập được phân đoạnmaxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
Mẹo
Xem thêm
chỉ mục
Giới hạn khóa chỉ mụcGhi chú
Thay đổi trong phiên bản 4. 2
Bắt đầu từ phiên bản 4. 2, MongoDB xóa for [fCV] được đặt thành
maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
6 hoặc cao hơnĐối với MongoDB 2. 6 đến các phiên bản MongoDB với fCV được đặt thành
db.inventory.find[ { }, { "": 0 } ] // Invalid starting in 4.4
9 hoặc sớm hơn, tổng kích thước của mục nhập chỉ mục, có thể bao gồm chi phí cấu trúc tùy thuộc vào loại BSON, phải nhỏ hơn 1024 byteKhi áp dụng
MongoDB sẽ không tạo chỉ mục trên bộ sưu tập nếu mục nhập chỉ mục cho tài liệu hiện có vượt quá
Hoạt động lập chỉ mục lại sẽ xảy ra lỗi nếu mục nhập chỉ mục cho trường được lập chỉ mục vượt quá. Hoạt động lập chỉ mục lại xảy ra như một phần của lệnh cũng như phương thức
Bởi vì các hoạt động này loại bỏ tất cả các chỉ mục khỏi một bộ sưu tập và sau đó tạo lại chúng một cách tuần tự, nên lỗi ngăn các hoạt động này xây dựng lại bất kỳ chỉ mục còn lại nào cho bộ sưu tập
MongoDB sẽ không chèn vào bộ sưu tập được lập chỉ mục bất kỳ tài liệu nào có trường được lập chỉ mục có mục nhập chỉ mục tương ứng sẽ vượt quá và thay vào đó, sẽ trả về lỗi. Các phiên bản trước của MongoDB sẽ chèn nhưng không lập chỉ mục các tài liệu đó
Các cập nhật cho trường được lập chỉ mục sẽ bị lỗi nếu giá trị được cập nhật khiến mục nhập chỉ mục vượt quá
Nếu một tài liệu hiện có chứa một trường được lập chỉ mục có mục nhập chỉ mục vượt quá giới hạn, mọi cập nhật dẫn đến việc di chuyển tài liệu đó trên đĩa sẽ bị lỗi
và sẽ không chèn tài liệu chứa trường được lập chỉ mục có mục nhập chỉ mục tương ứng sẽ vượt quá
Trong MongoDB 2. 6, các thành viên phụ của bộ bản sao sẽ tiếp tục sao chép tài liệu có trường được lập chỉ mục có mục nhập chỉ mục tương ứng vượt quá đồng bộ hóa ban đầu nhưng sẽ in cảnh báo trong nhật ký
Các thành viên phụ cũng cho phép các hoạt động xây dựng và xây dựng lại chỉ mục trên một tập hợp chứa trường được lập chỉ mục có mục nhập chỉ mục tương ứng vượt quá nhưng có cảnh báo trong nhật ký
Với các bộ bản sao phiên bản hỗn hợp trong đó các phần phụ là phiên bản 2. 6 và chính là phiên bản 2. 4, thứ hai sẽ sao chép tài liệu được chèn hoặc cập nhật trên 2. 4 chính, nhưng sẽ in thông báo lỗi trong nhật ký nếu tài liệu chứa trường được lập chỉ mục có mục nhập chỉ mục tương ứng vượt quá
Đối với các bộ sưu tập được phân mảnh hiện có, quá trình di chuyển đoạn dữ liệu sẽ không thành công nếu đoạn dữ liệu đó có tài liệu chứa trường được lập chỉ mục có mục nhập chỉ mục vượt quá
Một bộ sưu tập có thể có không quá 64 chỉ mục
Tên chỉ mục Độ dàiGhi chú
Thay đổi trong phiên bản 4. 2
Bắt đầu từ phiên bản 4. 2, MongoDB loại bỏ giới hạn cho các phiên bản MongoDB có [fCV] được đặt thành
maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
6 trở lênTrong các phiên bản trước của MongoDB hoặc các phiên bản MongoDB có fCV được đặt thành
db.inventory.find[ { }, { "": 0 } ] // Invalid starting in 4.4
9 hoặc cũ hơn, tên chỉ mục đủ điều kiện, bao gồm không gian tên và dấu phân cách dấu chấm [i. e. { ..., size: { h: 10, w: 15.25, uom: "cm" }, .. }
6], không được dài hơn 127 byteTheo mặc định,
{ ..., size: { h: 10, w: 15.25, uom: "cm" }, .. }
7 là sự kết hợp của tên trường và loại chỉ mục. Bạn có thể chỉ định rõ ràng { ..., size: { h: 10, w: 15.25, uom: "cm" }, .. }
7 cho phương thức để đảm bảo rằng tên chỉ mục đủ điều kiện không vượt quá giới hạnSố trường được lập chỉ mục trong một chỉ mục tổng hợpKhông thể có nhiều hơn 32 trường trong một chỉ mục phức hợp
Truy vấn không thể sử dụng cả chỉ mục văn bản và không gian địa lýBạn không thể kết hợp truy vấn yêu cầu một toán tử đặc biệt với một toán tử truy vấn yêu cầu một loại chỉ mục đặc biệt khác. Ví dụ: bạn không thể kết hợp truy vấn với toán tử
Các trường có Chỉ mục 2dsphere chỉ có thể chứa Hình họcCác trường có chỉ mục 2dsphere phải chứa dữ liệu hình học ở dạng hoặc dữ liệu. Nếu bạn cố gắng chèn một tài liệu có dữ liệu phi hình học vào trường được lập chỉ mục
db.inventory.find[ {}, { size: 1, "size.uom": 1 } ] // Invalid starting in 4.4
3 hoặc xây dựng chỉ mục db.inventory.find[ {}, { size: 1, "size.uom": 1 } ] // Invalid starting in 4.4
3 trên một bộ sưu tập trong đó trường được lập chỉ mục có dữ liệu phi hình học, thao tác sẽ không thành côngMẹo
Xem thêm
Các chỉ mục duy nhất giới hạn trong
Số lượng khóa chỉ mục 2dsphere có hạnĐể tạo khóa cho chỉ mục 2dsphere, ánh xạ tới biểu diễn bên trong. Biểu diễn bên trong kết quả có thể là một mảng lớn các giá trị
Khi tạo các khóa chỉ mục trên một trường chứa một mảng, hãy tạo một khóa chỉ mục cho từng phần tử mảng. Đối với các chỉ mục phức hợp, tính toán các bộ khóa được tạo cho từng trường. Nếu cả hai bộ đều lớn, thì việc tính toán tích cartesian có thể khiến thao tác vượt quá giới hạn bộ nhớ
giới hạn số lượng khóa tối đa được tạo cho một tài liệu để tránh lỗi bộ nhớ. Mặc định là 100000 khóa chỉ mục trên mỗi tài liệu. Có thể tăng giới hạn, nhưng nếu thao tác yêu cầu nhiều khóa hơn tham số chỉ định, thao tác sẽ thất bại
Các giá trị NaN được Công cụ lưu trữ WiredTiger trả về từ Truy vấn được bảo hiểm luôn thuộc loại doubleNếu giá trị của một trường được trả về từ một truy vấn là
{ ..., instock: [ { warehouse: "A", qty: 35 }, { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ], .. }
1, thì loại của giá trị { ..., instock: [ { warehouse: "A", qty: 35 }, { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ], .. }
1 đó luôn là { ..., instock: [ { warehouse: "A", qty: 35 }, { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ], .. }
3Chỉ mục đa phímkhông thể bao gồm các truy vấn trên [các] trường mảng
chỉ mục không gian địa lýkhông thể
Sử dụng bộ nhớ trong bản dựng chỉ mụchỗ trợ xây dựng một hoặc nhiều chỉ mục trên bộ sưu tập. sử dụng kết hợp bộ nhớ và các tệp tạm thời trên đĩa để hoàn thành các bản dựng chỉ mục. Giới hạn sử dụng bộ nhớ mặc định là 200 megabyte [đối với phiên bản 4. 2. 3 trở lên] và 500 [dành cho phiên bản 4. 2. 2 trở về trước], được chia sẻ giữa tất cả các chỉ mục được tạo bằng một lệnh duy nhất. Khi đạt đến giới hạn bộ nhớ, hãy sử dụng các tệp đĩa tạm thời trong thư mục con có tên
{ ..., instock: [ { warehouse: "A", qty: 35 }, { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ], .. }
9 trong thư mục để hoàn tất quá trình xây dựngBạn có thể ghi đè giới hạn bộ nhớ bằng cách đặt tham số máy chủ. Việc đặt giới hạn bộ nhớ cao hơn có thể giúp hoàn thành việc xây dựng chỉ mục nhanh hơn. Tuy nhiên, đặt giới hạn này quá cao so với RAM chưa sử dụng trên hệ thống của bạn có thể dẫn đến cạn kiệt bộ nhớ và tắt máy chủ
Thay đổi trong phiên bản 4. 2
Đối với
6, giới hạn bộ nhớ xây dựng chỉ mục áp dụng cho tất cả các lần xây dựng chỉ mụcmaxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
Đối với
9, giới hạn bộ nhớ xây dựng chỉ mục chỉ áp dụng cho các bản dựng chỉ mục nền trướcdb.inventory.find[ { }, { "": 0 } ] // Invalid starting in 4.4
Việc xây dựng chỉ mục có thể được bắt đầu bằng lệnh của người dùng, chẳng hạn như Tạo chỉ mục hoặc bằng một quy trình quản trị, chẳng hạn như đồng bộ hóa ban đầu. Cả hai đều phải tuân theo giới hạn được thiết lập bởi
Thao tác đồng bộ hóa ban đầu chỉ điền vào một bộ sưu tập tại một thời điểm và không có nguy cơ vượt quá giới hạn bộ nhớ. Tuy nhiên, người dùng có thể bắt đầu xây dựng chỉ mục trên nhiều bộ sưu tập trong nhiều cơ sở dữ liệu đồng thời và có khả năng tiêu thụ một lượng bộ nhớ lớn hơn giới hạn được đặt trong
Mẹo
Để giảm thiểu tác động của việc xây dựng chỉ mục trên các bộ bản sao và các cụm được phân đoạn với các phân đoạn của bộ bản sao, hãy sử dụng quy trình tạo chỉ mục cuộn như được mô tả trên Bản dựng chỉ mục cuộn trên các bộ bản sao
Các loại đối chiếu và chỉ mụcCác loại chỉ mục sau chỉ hỗ trợ so sánh nhị phân đơn giản và không hỗ trợ
chỉ mục văn bản,
chỉ mục 2d và
chỉ mục geoHaystack
Mẹo
Để tạo chỉ mục
db.inventory.find[ {}, { "instock": { $slice: 1 }, "instock.warehouse": 0 } ] // Invalid starting in 4.4
6, db.inventory.find[ {}, { "instock": { $slice: 1 }, "instock.warehouse": 0 } ] // Invalid starting in 4.4
7 hoặc db.inventory.find[ {}, { "instock": { $slice: 1 }, "instock.warehouse": 0 } ] // Invalid starting in 4.4
8 trên bộ sưu tập có đối chiếu không đơn giản, bạn phải chỉ định rõ ràng db.inventory.find[ {}, { "instock": { $slice: 1 }, "instock.warehouse": 0 } ] // Invalid starting in 4.4
9 khi tạo chỉ mụcChỉ mục ẩnBạn không thể ẩn chỉ số
2db.inventory.find[ {}, { "$instock.warehouse": 0, "$item": 0, "detail.$price": 1 } ] // Invalid starting in 4.4
Bạn không thể sử dụng trên một chỉ mục ẩn
sắp xếp
Số Phím Sắp Xếp Tối ĐaBạn có thể sắp xếp trên tối đa 32 phím
Dữ liệu
Số lượng tài liệu tối đa trong một bộ sưu tập giới hạnNếu bạn chỉ định số lượng tài liệu tối đa trong bộ sưu tập giới hạn với tham số '_________03', thì giá trị phải nhỏ hơn 2 31 tài liệu
Nếu bạn không chỉ định số lượng tài liệu tối đa khi tạo bộ sưu tập giới hạn, sẽ không có giới hạn về số lượng tài liệu
Bộ bản sao
Số thành viên của một bộ bản saoBộ bản sao có thể có tối đa 50 thành viên
Số thành viên biểu quyết của một bộ bản saoBộ bản sao có thể có tối đa 7 thành viên biểu quyết. Đối với các bộ bản sao có tổng cộng hơn 7 thành viên, hãy xem
Kích thước tối đa của Oplog được tạo tự độngNếu bạn không chỉ định rõ ràng kích thước oplog [i. e. với hoặc ] MongoDB sẽ tạo một oplog không lớn hơn 50 gigabyte.
[]Oplog có thể phát triển vượt quá giới hạn kích thước được định cấu hình để tránh xóaCụm phân mảnh
Các cụm được chia nhỏ có các hạn chế và ngưỡng được mô tả tại đây
Sharding hạn chế hoạt động
Hoạt động không khả dụng trong môi trường phân mảnhkhông cho phép tham chiếu đến đối tượng
/\. "$
08 từ hàm. Điều này không phổ biến trong các bộ sưu tập chưa được chia nhỏLệnh không được hỗ trợ trong môi trường sharded
Trong MongoDB 5. 0 trở về trước, bạn không thể chỉ định các bộ sưu tập được phân đoạn trong tham số
/\. "$
11 của các giai đoạnCác truy vấn được bảo hiểm trong các cụm phân mảnhKhi chạy trên , các chỉ mục chỉ có thể truy vấn trên các bộ sưu tập nếu chỉ mục chứa khóa phân đoạn
Sharding Kích thước dữ liệu bộ sưu tập hiện cóMột bộ sưu tập hiện có chỉ có thể được chia nhỏ nếu kích thước của nó không vượt quá giới hạn cụ thể. Các giới hạn này có thể được ước tính dựa trên kích thước trung bình của tất cả các giá trị và kích thước được định cấu hình
Quan trọng
Các giới hạn này chỉ áp dụng cho hoạt động phân mảnh ban đầu. Bộ sưu tập được phân mảnh có thể phát triển đến bất kỳ kích thước nào sau khi kích hoạt thành công phân đoạn
Sử dụng các công thức sau để tính kích thước bộ sưu tập tối đa theo lý thuyết
maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
Ghi chú
Kích thước tài liệu tối đa là 16MB hoặc
/\. "$
14 byteTất cả các chuyển đổi nên sử dụng tỷ lệ cơ sở 2, e. g. 1024 kilobyte = 1 megabyte
Nếu
/\. "$
15 nhỏ hơn hoặc gần bằng với bộ sưu tập mục tiêu, hãy tăng kích thước khối để đảm bảo phân đoạn ban đầu thành công. Nếu có nghi ngờ về việc liệu kết quả tính toán có quá 'gần' với kích thước bộ sưu tập mục tiêu hay không, tốt hơn là nên tăng kích thước khốiSau khi phân mảnh ban đầu thành công, bạn có thể giảm kích thước khối nếu cần. Nếu sau này bạn giảm kích thước khối, có thể mất thời gian để tất cả các khối chia thành kích thước mới. Xem Sửa đổi kích thước phạm vi trong cụm phân mảnh để biết hướng dẫn về cách sửa đổi kích thước khối
Bảng này minh họa kích thước bộ sưu tập tối đa gần đúng bằng cách sử dụng các công thức được mô tả ở trên
Kích thước trung bình của các giá trị khóa phân đoạn
512 byte
256 byte
128 byte
64 byte
Số lần chia tối đa
32,768
65,536
131,072
262,144
Kích thước bộ sưu tập tối đa [Kích thước khối 64 MB]
1TB
2TB
4 TB
8 TB
Kích thước bộ sưu tập tối đa [Kích thước khối 128 MB]
2TB
4 TB
8 TB
16 TB
Kích thước bộ sưu tập tối đa [Kích thước khối 256 MB]
4 TB
8 TB
16 TB
32 TB
Thao tác sửa đổi tài liệu đơn lẻ trong bộ sưu tập được chia nhỏTất cả và hoạt động cho một bộ sưu tập được phân đoạn chỉ định tùy chọn
/\. "$
18 hoặc /\. "$
19 phải bao gồm trường hoặc trường db.inventory.find[ {}, { "$instock.warehouse": 0, "$item": 0, "detail.$price": 1 } ] // Invalid starting in 4.4
2 trong đặc tả truy vấnvà các hoạt động chỉ định
/\. "$
18 hoặc /\. "$
19 trong bộ sưu tập được phân đoạn không chứa trường hoặc trường db.inventory.find[ {}, { "$instock.warehouse": 0, "$item": 0, "detail.$price": 1 } ] // Invalid starting in 4.4
2 trả về lỗiChỉ mục duy nhất trong bộ sưu tập được chia nhỏMongoDB không hỗ trợ các chỉ mục duy nhất trên các phân đoạn, ngoại trừ khi chỉ mục duy nhất chứa khóa phân đoạn đầy đủ làm tiền tố của chỉ mục. Trong những tình huống này, MongoDB sẽ thực thi tính duy nhất trên toàn bộ khóa, không phải một trường duy nhất
Mẹo
Thấy
cho một cách tiếp cận thay thế
Số lượng tài liệu tối đa trên mỗi phạm vi để di chuyểnTheo mặc định, MongoDB không thể di chuyển một phạm vi nếu số lượng tài liệu trong phạm vi lớn hơn 2 lần kết quả chia cấu hình cho kích thước tài liệu trung bình. Nếu MongoDB có thể di chuyển một phạm vi con của một đoạn và giảm kích thước xuống nhỏ hơn thế, thì bộ cân bằng sẽ làm như vậy bằng cách di chuyển một phạm vi. bao gồm trường
/\. "$
27, đại diện cho kích thước tài liệu trung bình trong bộ sưu tậpĐối với khối đó là
Cài đặt bộ cân bằng
28 cho phép bộ cân bằng di chuyển các khối quá lớn để di chuyển miễn là các khối đó không được dán nhãn. Xem để biết chi tiết/\. "$
Khi ban hành và lệnh, có thể chỉ định tùy chọn cho phép di chuyển các phạm vi quá lớn để di chuyển. Các phạm vi có thể hoặc không thể được dán nhãn
Hạn chế chính của Shard
Kích thước khóa mảnhBắt đầu từ phiên bản 4. 4, MongoDB loại bỏ giới hạn về kích thước khóa phân đoạn
Đối với MongoDB 4. 2 trở về trước, khóa phân đoạn không thể vượt quá 512 byte
Loại chỉ mục khóa phân mảnhChỉ mục có thể là chỉ mục tăng dần trên khóa phân đoạn, chỉ mục ghép bắt đầu bằng khóa phân đoạn và chỉ định thứ tự tăng dần cho khóa phân đoạn hoặc chỉ mục được băm
Chỉ mục không thể là chỉ mục chỉ định chỉ mục nhiều phím, chỉ mục văn bản hoặc chỉ mục trên các trường
Lựa chọn khóa phân đoạn là bất biến trong MongoDB 4. 2 trở về trướcCác tùy chọn thay đổi khóa phân đoạn tùy thuộc vào phiên bản MongoDB mà bạn đang chạy
Bắt đầu từ MongoDB 5. 0, bạn có thể bằng cách thay đổi khóa phân đoạn của tài liệu
Bắt đầu từ MongoDB 4. 4, bạn có thể 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ó
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
Trong MongoDB 4. 2 trở về trước, để thay đổi khóa phân đoạn
Kết xuất tất cả dữ liệu từ MongoDB sang định dạng bên ngoài
Bỏ bộ sưu tập đã phân mảnh ban đầu
Định cấu hình sharding bằng phím shard mới
Chia trước phạm vi khóa phân đoạn để đảm bảo phân phối đồng đều ban đầu
Khôi phục dữ liệu đã đổ vào MongoDB
Đối với các cụm có khối lượng chèn cao, khóa phân đoạn có các phím tăng và giảm đơn điệu có thể ảnh hưởng đến thông lượng chèn. Nếu khóa phân đoạn của bạn là trường
db.inventory.find[ {}, { "$instock.warehouse": 0, "$item": 0, "detail.$price": 1 } ] // Invalid starting in 4.4
2, hãy lưu ý rằng giá trị mặc định của trường db.inventory.find[ {}, { "$instock.warehouse": 0, "$item": 0, "detail.$price": 1 } ] // Invalid starting in 4.4
2 thường có giá trị tăng dầnKhi chèn tài liệu bằng các phím phân đoạn tăng dần đều, tất cả các phần chèn đều giống nhau trên một. Hệ thống cuối cùng sẽ phân chia phạm vi khối nhận tất cả các thao tác ghi và di chuyển nội dung của nó để phân phối dữ liệu đồng đều hơn. Tuy nhiên, tại bất kỳ thời điểm nào, cụm chỉ hướng các hoạt động chèn vào một phân đoạn duy nhất, điều này tạo ra tắc nghẽn thông lượng chèn
Nếu các hoạt động trên cụm chủ yếu là hoạt động đọc và cập nhật, giới hạn này có thể không ảnh hưởng đến cụm
Để tránh ràng buộc này, hãy sử dụng một hoặc chọn một trường không tăng hoặc giảm một cách đơn điệu
và lưu trữ giá trị băm của các khóa có giá trị tăng dần
hoạt động
Hoạt động sắp xếpNếu MongoDB không thể sử dụng một hoặc nhiều chỉ mục để lấy thứ tự sắp xếp, MongoDB phải thực hiện thao tác sắp xếp chặn trên dữ liệu. Tên đề cập đến yêu cầu rằng giai đoạn
/\. "$
33 đọc tất cả các tài liệu đầu vào trước khi trả lại bất kỳ tài liệu đầu ra nào, chặn luồng dữ liệu cho truy vấn cụ thể đóNếu MongoDB yêu cầu sử dụng hơn 100 megabyte bộ nhớ hệ thống cho thao tác sắp xếp chặn, MongoDB sẽ trả về lỗi trừ khi truy vấn chỉ định [Mới trong MongoDB 4. 4]. cho phép MongoDB sử dụng các tệp tạm thời trên đĩa để lưu trữ dữ liệu vượt quá giới hạn bộ nhớ hệ thống 100 megabyte trong khi xử lý thao tác sắp xếp chặn
Thay đổi trong phiên bản 4. 4. Đối với MongoDB 4. 2 trở về trước, thao tác sắp xếp chặn không được vượt quá 32 megabyte bộ nhớ hệ thống
Để biết thêm thông tin về sắp xếp và sử dụng chỉ mục, hãy xem
Vận hành đường ống tổng hợpBắt đầu từ MongoDB 6. 0, tham số kiểm soát liệu các giai đoạn đường ống có yêu cầu hơn 100 megabyte bộ nhớ để thực thi ghi tệp tạm thời vào đĩa theo mặc định hay không
Nếu được đặt thành
38, các giai đoạn đường ống yêu cầu hơn 100 megabyte bộ nhớ để thực thi ghi tệp tạm thời vào đĩa theo mặc định. Bạn có thể vô hiệu hóa việc ghi các tệp tạm thời vào đĩa cho các lệnh cụ thể/\. "$
39 hoặc/\. "$
40 bằng cách sử dụng tùy chọn/\. "$
41/\. "$
Nếu được đặt thành
43, các giai đoạn đường ống yêu cầu hơn 100 megabyte bộ nhớ để thực thi sẽ gây ra lỗi theo mặc định. Bạn có thể cho phép ghi các tệp tạm thời vào đĩa cho/\. "$
39 hoặc/\. "$
40 cụ thể bằng cách sử dụng tùy chọn/\. "$
46/\. "$
Giai đoạn tổng hợp không bị giới hạn ở 100 megabyte RAM vì nó chạy trong một quy trình riêng biệt
Ví dụ về các giai đoạn có thể ghi tệp tạm thời vào đĩa khi
/\. "$
38 làkhi thao tác sắp xếp không được chỉ mục hỗ trợ
Ghi chú
Các giai đoạn quy trình hoạt động trên các luồng tài liệu với mỗi giai đoạn quy trình tiếp nhận tài liệu, xử lý chúng và sau đó xuất tài liệu kết quả
Một số giai đoạn không thể xuất bất kỳ tài liệu nào cho đến khi họ đã xử lý tất cả các tài liệu đến. Các giai đoạn đường ống này phải giữ đầu ra giai đoạn của chúng trong RAM cho đến khi tất cả các tài liệu đến được xử lý. Do đó, các giai đoạn quy trình này có thể yêu cầu nhiều dung lượng hơn giới hạn 100 MB
Nếu kết quả của một trong các giai đoạn quy trình của bạn vượt quá giới hạn, hãy xem xét
Bắt đầu từ MongoDB 4. 2, thông báo nhật ký hồ sơ và thông báo nhật ký chẩn đoán bao gồm chỉ báo
/\. "$
56 nếu bất kỳ giai đoạn tổng hợp nào ghi dữ liệu vào tệp tạm thời doTổng hợp và mối quan tâm đọcBắt đầu từ MongoDB 4. 2, giai đoạn không thể được sử dụng cùng với mối quan tâm đã đọc. Nghĩa là, nếu bạn chỉ định mối quan tâm đã đọc cho , thì bạn không thể đưa giai đoạn vào quy trình
Không thể sử dụng giai đoạn kết hợp với mối quan tâm đã đọc. Nghĩa là, nếu bạn chỉ định mối quan tâm đã đọc cho , thì bạn không thể đưa giai đoạn vào quy trình
Mẹo
Thấy
7 Nội bộ chỉ mụcdb.inventory.find[ {}, { "instock": { $slice: 1 }, "instock.warehouse": 0 } ] // Invalid starting in 4.4
Đối với các truy vấn hình cầu, hãy sử dụng kết quả chỉ mục
db.inventory.find[ {}, { size: 1, "size.uom": 1 } ] // Invalid starting in 4.4
3Việc sử dụng chỉ mục
db.inventory.find[ {}, { "instock": { $slice: 1 }, "instock.warehouse": 0 } ] // Invalid starting in 4.4
7 cho các truy vấn hình cầu có thể dẫn đến kết quả không chính xác, chẳng hạn như việc sử dụng chỉ mục db.inventory.find[ {}, { "instock": { $slice: 1 }, "instock.warehouse": 0 } ] // Invalid starting in 4.4
7 cho các truy vấn hình cầu bao quanh các cựctọa độ không gian địa lýGiá trị kinh độ hợp lệ nằm trong khoảng từ
72 đến/\. "$
73, bao gồm cả/\. "$
Các giá trị vĩ độ hợp lệ nằm trong khoảng từ
74 đến/\. "$
75, bao gồm cả hai/\. "$
Đối với hoặc , nếu bạn chỉ định một đa giác một vòng có diện tích lớn hơn một bán cầu, hãy bao gồm biểu thức; . Đối với tất cả các đa giác GeoJSON khác có diện tích lớn hơn bán cầu hoặc truy vấn cho hình học bổ sung
Giao dịch nhiều tài liệuĐối với các giao dịch nhiều tài liệu
Bạn có thể chỉ định thao tác đọc/ghi [CRUD] trên các bộ sưu tập hiện có. Để biết danh sách các hoạt động CRUD, hãy xem
Bắt đầu từ MongoDB 4. 4, bạn có thể tạo bộ sưu tập và lập chỉ mục trong giao dịch. Để biết chi tiết, xem
Các bộ sưu tập được sử dụng trong một giao dịch có thể nằm trong các cơ sở dữ liệu khác nhau
Ghi chú
Bạn không thể tạo bộ sưu tập mới trong giao dịch ghi chéo. Ví dụ: nếu bạn ghi vào một bộ sưu tập hiện có trong một phân đoạn và ngầm tạo một bộ sưu tập trong một phân đoạn khác, MongoDB không thể thực hiện cả hai thao tác trong cùng một giao dịch
Bạn không thể ghi vào bộ sưu tập giới hạn. [Bắt đầu từ MongoDB 4. 2]
Bạn không thể sử dụng mối quan tâm đã đọc khi đọc từ bộ sưu tập được giới hạn. [Bắt đầu từ MongoDB 5. 0]
Bạn không thể đọc/ghi vào các bộ sưu tập trong cơ sở dữ liệu
84,/\. "$
85 hoặc/\. "$
86/\. "$
Bạn không thể viết thư cho
87 bộ sưu tập/\. "$
Bạn không thể trả lại kế hoạch truy vấn của hoạt động được hỗ trợ [i. e.
88]/\. "$
Đối với các con trỏ được tạo bên ngoài giao dịch, bạn không thể gọi bên trong giao dịch
Đối với các con trỏ được tạo trong giao dịch, bạn không thể gọi bên ngoài giao dịch
Bắt đầu từ MongoDB 4. 2, bạn không thể chỉ định là thao tác đầu tiên trong giao dịch
Thay đổi trong phiên bản 4. 4
Các hoạt động sau đây không được phép trong giao dịch
Các hoạt động ảnh hưởng đến danh mục cơ sở dữ liệu, chẳng hạn như tạo hoặc xóa bộ sưu tập hoặc chỉ mục khi sử dụng MongoDB 4. 2 hoặc thấp hơn. Bắt đầu từ MongoDB 4. 4, bạn có thể tạo các bộ sưu tập và chỉ mục trong các giao dịch trừ khi giao dịch là giao dịch ghi chéo. Để biết chi tiết, xem
Tạo bộ sưu tập mới trong giao dịch ghi chéo. Ví dụ: nếu bạn ghi vào một bộ sưu tập hiện có trong một phân đoạn và ngầm tạo một bộ sưu tập trong một phân đoạn khác, MongoDB không thể thực hiện cả hai thao tác trong cùng một giao dịch
, e. g. phương thức và chỉ mục, e. g. và phương pháp, khi sử dụng mức độ quan tâm đọc khác với
Các lệnh and và các phương thức trợ giúp của chúng
Các hoạt động phi CRUD và phi thông tin khác, chẳng hạn như , , v.v. và những người giúp việc của họ
Giao dịch có giới hạn trọn đời như được chỉ định bởi. Mặc định là 60 giây
Viết kích thước giới hạn hàng loạt lệnhmaxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
02 ghi được cho phép trong một hoạt động hàng loạt, được xác định bởi một yêu cầu duy nhất tới máy chủThay đổi trong phiên bản 3. 6. Giới hạn tăng từ
maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
03 lên maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
02 viết. Giới hạn này cũng áp dụng cho các thư maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
05 cũCác hoạt động trong và các phương pháp so sánh trong trình điều khiển không có giới hạn này
Lượt xemĐịnh nghĩa chế độ xem
maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
08 không thể bao gồm hoặc giai đoạn. Hạn chế này cũng áp dụng cho các đường ống nhúng, chẳng hạn như các đường ống được sử dụng trong hoặc các giai đoạnChế độ xem có các hạn chế hoạt động sau
Chế độ xem chỉ đọc
Bạn không thể đổi tên chế độ xem
các thao tác trên các khung nhìn không hỗ trợ các toán tử chiếu sau
Chế độ xem không hỗ trợ tìm kiếm văn bản
Chế độ xem không hỗ trợ các thao tác thu nhỏ bản đồ
Chế độ xem không hỗ trợ hoạt động GeoNear [i. e. giai đoạn đường ống]
Mới trong phiên bản 4. 4
/\. "$
8-Hạn chế đường dẫn trường tiền tốBắt đầu trong MongoDB 4. 4, phép chiếu và không thể chiếu trường bắt đầu bằng /\. "$
8 ngoại trừ trường Ví dụ: bắt đầu trong MongoDB 4. 4, thao tác sau không hợp lệdb.inventory.find[ {}, { "$instock.warehouse": 0, "$item": 0, "detail.$price": 1 } ] // Invalid starting in 4.4
Trong phiên bản cũ hơn, MongoDB bỏ qua các phép chiếu trường có tiền tố /\. "$
8. /\. "$
8 Hạn chế vị trí của toán tử vị tríBắt đầu trong MongoDB 4. 4, toán tử chiếu chỉ có thể xuất hiện ở cuối đường dẫn trường; . g. maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
26 hoặc maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
27. Ví dụ: bắt đầu từ MongoDB 4. 4, thao tác sau không hợp lệdb.inventory.find[ { }, { "instock.$.qty": 1 } ] // Invalid starting in 4.4
Để giải quyết, hãy xóa thành phần của đường dẫn trường theo sau toán tử chiếu. Trong các phiên bản trước, MongoDB bỏ qua phần đường dẫn theo sau /\. "$
8; . e. phép chiếu được coi là maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
30. Hạn chế chiếu tên trường trốngBắt đầu trong MongoDB 4. 4 và phép chiếu không thể bao gồm phép chiếu tên trường trống. Ví dụ: bắt đầu từ MongoDB 4. 4, thao tác sau không hợp lệdb.inventory.find[ { }, { "": 0 } ] // Invalid starting in 4.4
Trong các phiên bản trước, MongoDB xử lý việc bao gồm/loại trừ trường trống vì nó sẽ chiếu các trường không tồn tại. Va chạm đường dẫn. Tài liệu nhúng và các trường của nóBắt đầu trong MongoDB 4. 4, chiếu một tài liệu nhúng với bất kỳ trường nào của tài liệu nhúng là bất hợp pháp. Ví dụ: xem xét một bộ sưu tập maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
33 với các tài liệu chứa trường maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
34{ ..., size: { h: 10, w: 15.25, uom: "cm" }, .. }
Bắt đầu từ MongoDB 4. 4, thao tác sau không thành công với lỗi maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
35 vì nó cố gắng chiếu cả tài liệu maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
34 và trường maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
37db.inventory.find[ {}, { size: 1, "size.uom": 1 } ] // Invalid starting in 4.4
Trong các phiên bản trước, phép chiếu cuối cùng giữa các tài liệu được nhúng và các trường của nó xác định phép chiếuNếu phép chiếu của tài liệu được nhúng xuất hiện sau bất kỳ và tất cả các phép chiếu của các trường của nó, thì MongoDB sẽ chiếu tài liệu được nhúng. Ví dụ: tài liệu phép chiếu
38 tạo ra kết quả tương tự như tài liệu phép chiếumaxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
39maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
Nếu phép chiếu của tài liệu nhúng xuất hiện trước phép chiếu bất kỳ trường nào của nó, thì MongoDB sẽ chiếu trường hoặc các trường đã chỉ định. Ví dụ: tài liệu phép chiếu
40 tạo ra kết quả tương tự như tài liệu phép chiếumaxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
41maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
16 của một mảng và các trường nhúngBắt đầu trong MongoDB 4. 4 và phép chiếu không thể chứa cả một mảng và một trường được nhúng trong mảng. Ví dụ: hãy xem xét một bộ sưu tập maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
33 có chứa một trường mảng maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
47{ ..., instock: [ { warehouse: "A", qty: 35 }, { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ], .. }
Bắt đầu từ MongoDB 4. 4, thao tác sau không thành công với lỗi maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
35db.inventory.find[ {}, { "instock": { $slice: 1 }, "instock.warehouse": 0 } ] // Invalid starting in 4.4
Trong các phiên bản trước, phép chiếu áp dụng cả hai phép chiếu và trả về phần tử đầu tiên [maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
49] trong mảng maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
47 nhưng loại bỏ trường maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
51 trong phần tử được chiếu. Bắt đầu từ MongoDB 4. 4, để đạt được kết quả tương tự, sử dụng phương pháp với hai giai đoạn riêng biệt. /\. "$
8 Toán tử vị trí và maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
16 Hạn chếBắt đầu trong MongoDB 4. 4 và phép chiếu không thể bao gồm biểu thức phép chiếu như một phần của biểu thức phép chiếu. Ví dụ: bắt đầu từ MongoDB 4. 4, thao tác sau không hợp lệ/\. "$
0Trong các phiên bản trước, MongoDB trả về phần tử đầu tiên [maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
60] trong mảng maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
47 khớp với điều kiện truy vấn; . e. phép chiếu vị trí maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
30 được ưu tiên và maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
63 không hoạt động. maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
64 không loại trừ bất kỳ trường tài liệu nào khácphiên
Phiên và giới hạn tên người dùng $externalĐể sử dụng với người dùng xác thực
maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
65 [Kerberos, LDAP hoặc x. 509 người dùng], tên người dùng không thể lớn hơn 10k byteThời gian chờ của phiên không hoạt độngCác phiên không nhận được thao tác đọc hoặc ghi trong 30 phút hoặc không được làm mới bằng cách sử dụng trong ngưỡng này được đánh dấu là đã hết hạn và có thể bị đóng bởi máy chủ MongoDB bất kỳ lúc nào. Đóng phiên sẽ hủy mọi hoạt động đang diễn ra và mở con trỏ được liên kết với phiên. Điều này bao gồm các con trỏ được định cấu hình bằng hoặc lớn hơn 30 phút
Hãy xem xét một ứng dụng đưa ra một. Máy chủ trả về một con trỏ cùng với một lô tài liệu được xác định bởi. Phiên làm mới mỗi khi ứng dụng yêu cầu một lô tài liệu mới từ máy chủ. Tuy nhiên, nếu ứng dụng mất hơn 30 phút để xử lý lô tài liệu hiện tại, phiên được đánh dấu là đã hết hạn và đóng. Khi ứng dụng yêu cầu lô tài liệu tiếp theo, máy chủ sẽ trả về lỗi do con trỏ bị tắt khi đóng phiên
Đối với các hoạt động trả về một con trỏ, nếu con trỏ có thể không hoạt động trong hơn 30 phút, hãy thực hiện thao tác trong một phiên rõ ràng bằng cách sử dụng và làm mới phiên định kỳ bằng lệnh. Ví dụ
/\. "$
1Trong hoạt động ví dụ, phương thức được liên kết với một phiên rõ ràng. Con trỏ được cấu hình để ngăn máy chủ đóng con trỏ nếu không hoạt động. Vòng lặp
maxSplits = 16777216 [bytes] / maxCollectionSize [MB] = maxSplits * [chunkSize / 2]
76 bao gồm một khối sử dụng để làm mới phiên cứ sau 5 phút. Vì phiên sẽ không bao giờ vượt quá thời gian chờ 30 phút không hoạt động, nên con trỏ có thể vẫn mở vô thời hạn