Matthew Chestnut là Cố vấn cấp cao tại ThreeWill. Ông có hơn 25 năm kinh nghiệm phát triển phần mềm về các ứng dụng năng suất kinh doanh của doanh nghiệp và phòng ban. Ông có thành tích đã được chứng minh về phát triển phần mềm chất lượng, quản lý dự án theo ngân sách và quản lý các nhóm phát triển phần mềm thành công
Cài đặt đối chiếu MongoDB
Được giới thiệu trong phiên bản 3. 4, các cài đặt MongoDB này ảnh hưởng đến cách dữ liệu được chọn và thứ tự dữ liệu được trả về
Bài đăng này sẽ chứng minh các cài đặt đối chiếu được sử dụng và kết quả của các cài đặt đó. Tôi có một bộ dữ liệu, truy vấn và kết quả mẫu, cùng với một số nhận xét, để hỗ trợ cho các kết luận này
Trường hợp sử dụng
Chúng tôi đã có trường hợp sử dụng sau trong một dự án gần đây sử dụng MongoDB (phiên bản 4. 2)
- Người dùng muốn tìm dữ liệu trong bộ sưu tập dựa trên giá trị chuỗi do người dùng nhập
- Thuộc tính để tìm kiếm trong bộ sưu tập là dữ liệu chuỗi
- Dữ liệu nên được tìm thấy bất kể ký tự “trường hợp”;
- Sử dụng tìm kiếm loại "bao gồm" thay vì đối sánh chính xác;
- Bỏ qua dấu khi khớp dữ liệu;
- Thứ tự sắp xếp của kết quả phải phân biệt chữ hoa chữ thường
Chi tiết triển khai
Để đáp ứng trường hợp sử dụng được trình bày, chúng tôi đã làm như sau
- Đã sử dụng mẫu đường dẫn tổng hợp MongoDB với “allowDiskUse” để hỗ trợ các tập dữ liệu lớn, hàng triệu mục
- Đã sử dụng truy vấn biểu thức chính quy không phân biệt chữ hoa chữ thường
- Đã sử dụng đối chiếu để truy xuất kết quả theo thứ tự phân biệt chữ hoa chữ thường
Dưới đây là thông tin chúng tôi đã sử dụng để đưa ra các quyết định triển khai này cùng với dữ liệu mẫu và truy vấn để chứng minh các cài đặt khác nhau thay đổi kết quả như thế nào
Thông tin MongoDB
Đây là thông tin ảnh hưởng đến thử nghiệm và quyết định của chúng tôi
bộ sưu tập
Đối chiếu cho phép người dùng chỉ định các quy tắc dành riêng cho ngôn ngữ để so sánh chuỗi, chẳng hạn như quy tắc cho trường hợp chữ cái và dấu trọng âm. Bạn có thể chỉ định đối chiếu cho một bộ sưu tập hoặc dạng xem, chỉ mục hoặc các hoạt động cụ thể hỗ trợ đối chiếu
Cài đặt “Sức mạnh” đối chiếu
Mức độ so sánh cần thực hiện, phù hợp với Mức độ so sánh của ICU
- Tài liệu MongoDB. https. // tài liệu. mongodb. com/thủ công/tham khảo/đối chiếu/chỉ mục. html
- Các thành phần quốc tế cho các tiêu chuẩn Unicode (ICU). https. // tài liệu. mongodb. com/manual/tham khảo/đối chiếu/
Chỉ mục đối chiếu
Đối với mục đích của bài đăng này, tôi đã cố tình bỏ qua bất kỳ việc tạo và sử dụng chỉ mục nào liên quan đến các truy vấn và kết quả mẫu
Đối chiếu và sử dụng chỉ mục
Nhìn thấy. https. // tài liệu. mongodb. com/thủ công/tham khảo/đối chiếu/chỉ mục. html
Để sử dụng một chỉ mục để so sánh chuỗi, một thao tác cũng phải chỉ định cùng một đối chiếu. Nghĩa là, một chỉ mục có đối chiếu không thể hỗ trợ thao tác thực hiện so sánh chuỗi trên các trường được lập chỉ mục nếu thao tác chỉ định một đối chiếu khác
Biểu thức chính quy và sử dụng chỉ mục
Nhìn thấy.
Đối với các truy vấn biểu thức chính quy phân biệt chữ hoa chữ thường, nếu một chỉ mục tồn tại cho trường, thì MongoDB sẽ so khớp biểu thức chính quy với các giá trị trong chỉ mục, quá trình này có thể nhanh hơn quét bộ sưu tập
Các truy vấn biểu thức chính quy phân biệt chữ hoa chữ thường thường không thể sử dụng các chỉ mục một cách hiệu quả. Việc triển khai $regex không nhận biết đối chiếu và không thể sử dụng các chỉ mục phân biệt chữ hoa chữ thường
Tùy chọn “allowDiskUse”
Nhìn thấy.
Nếu MongoDB không thể sử dụng chỉ mục để lấy tài liệu theo thứ tự sắp xếp được yêu cầu, kích thước tổng hợp của tất cả tài liệu trong thao tác sắp xếp, cộng với chi phí nhỏ, phải nhỏ hơn 32 megabyte
Nếu vượt quá kích thước, bạn sẽ gặp lỗi Tràn mức sử dụng dữ liệu được đệm trong giai đoạn sắp xếp vượt quá giới hạn nội bộ
Để cho phép xử lý các bộ dữ liệu lớn, bạn có thể đặt tùy chọn allowDiskUse trong phương thức tổng hợp(). Tùy chọn allowDiskUse cho phép hầu hết các hoạt động đường dẫn tổng hợp ghi dữ liệu vào một tệp tạm thời
Truy vấn mẫu và dữ liệu mẫu
Dưới đây là dữ liệu mẫu và truy vấn thể hiện tác động của cài đặt đối chiếu
Truy vấn 1 – Chọn tất cả các hàng
truy vấn 1. 1
- Không có đối chiếu được chỉ định
- Thứ tự sắp xếp có phân biệt chữ hoa chữ thường
[ps]db. getCollection(‘SortTest’)
. tổng hợp(
[{ $sort. { "Tên". 1 } }],
{
"đối chiếu". { "ngôn ngữ". "vi", sức mạnh. 1 },
"allowDiskUse". true
}
)[/ps]
Dữ liệu mẫu
AAA001 EEE003 EXTRA AAA009 EXTRA EEE015 EXTRA ZZZ021 EXTRA aaa010 EXTRA eee016 EXTRA zzz022 EXTRA ÉÉÉ017 EXTRA ééé018 ZZZ023 aaa002 eee004 extra AAA007 extra EEE011 extra ZZZ019 extra aaa008 extra eee012 extra zzz020 extra ÉÉÉ013 extra ééé014 zzz024 ÉÉÉ005 ééé006Truy vấn 2 – So khớp chính xác giá trị thuộc tính trong đó Mã = “eee”
truy vấn 2. 1
- Không có đối chiếu được chỉ định
- Tìm kiếm phân biệt chữ hoa chữ thường
- Tìm kiếm nhạy cảm với dấu phụ
- Thứ tự sắp xếp phân biệt chữ hoa chữ thường.
[ps]db. getCollection(‘SortTest’)
. tổng hợp(
[
{ $match. { "Mã số". "eee" } },
{ $sort. { "Tên". 1 } }
],
{
"allowDiskUse". đúng
}
)[/ps]
Dữ liệu mẫu
AAA001 aaa002 EEE003 eee004 ÉÉÉ005 ééé006 extra AAA007 extra aaa008 EXTRA AAA009 EXTRA aaa010 extra EEE011 extra eee012 extra ÉÉÉ013 extra ééé014 EXTRA EEE015 EXTRA eee016 EXTRA ÉÉÉ017 EXTRA ééé018 extra ZZZ019 extra zzz020 EXTRA ZZZ021 EXTRA zzz022 ZZZ023 zzz024Truy vấn 2 – So khớp chính xác giá trị thuộc tính trong đó Mã = “eee”
truy vấn 2. 1
- Không có đối chiếu được chỉ định
- Tìm kiếm phân biệt chữ hoa chữ thường
- Tìm kiếm nhạy cảm với dấu phụ
- Thứ tự sắp xếp phân biệt chữ hoa chữ thường.
[ps] db. getCollection(‘SortTest’)
. tổng hợp(
[
{ $match. { "Mã số". "eee" } },
{ $sort. { "Tên". 1 } }
],
{
"allowDiskUse". true
}
) [/ps]
Dữ liệu mẫu
EXTRA eee016 eee004 extra eee012truy vấn 2. 2
- Tìm kiếm không phân biệt chữ hoa chữ thường
- Việc tìm kiếm là dấu phụ không nhạy cảm
- Thứ tự sắp xếp không phân biệt chữ hoa chữ thường
- Điểm mạnh 1 – Đối chiếu chỉ thực hiện so sánh các ký tự cơ bản, bỏ qua các khác biệt khác như dấu phụ và chữ hoa chữ thường
[ps]db. getCollection(‘SortTest’)
. tổng hợp(
[
{ $match. { "Mã số". "eee" } },
{ $sort. { "Tên". 1 } }
],
{
"đối chiếu". { "ngôn ngữ". "vi", sức mạnh. 1 },
"allowDiskUse". true
}
)
[/ps]
Dữ liệu mẫu
EEE003 eee004 ÉÉÉ005 ééé006 extra EEE011 extra eee012 extra ÉÉÉ013 extra ééé014 EXTRA EEE015 EXTRA eee016 EXTRA ÉÉÉ017 EXTRA ééé018truy vấn 2. 3
- Tìm kiếm không phân biệt chữ hoa chữ thường
- Tìm kiếm nhạy cảm với dấu phụ
- Thứ tự sắp xếp không phân biệt chữ hoa chữ thường
- Sức mạnh 2 – Phép đối chiếu thực hiện so sánh cho đến các khác biệt phụ, chẳng hạn như dấu phụ. Nghĩa là phép đối chiếu thực hiện so sánh các ký tự cơ sở (khác biệt chính) và dấu phụ (khác biệt thứ cấp). Sự khác biệt giữa các ký tự cơ sở được ưu tiên hơn sự khác biệt thứ cấp.
[ps]db. getCollection(‘SortTest’)
. tổng hợp(
[
{ $match. { "Mã số". "eee" } },
{ $sort. { "Tên". 1 } }
],
{
"đối chiếu". { "ngôn ngữ". "vi", sức mạnh. 2 },
"allowDiskUse". true
}[/ps]
Dữ liệu mẫu
EEE003 eee004 extra EEE011 extra eee012 EXTRA EEE015 EXTRA eee016truy vấn 2. 4
- Tìm kiếm phân biệt chữ hoa chữ thường
- Tìm kiếm nhạy cảm với dấu phụ
- Thứ tự sắp xếp không phân biệt chữ hoa chữ thường
Cường độ 3 – Đây là mức cường độ mặc định nếu mức cường độ không được chỉ định. Đối chiếu thực hiện so sánh với sự khác biệt cấp ba, chẳng hạn như các biến thể trường hợp và chữ cái. Nghĩa là, đối chiếu thực hiện so sánh các ký tự cơ sở (sự khác biệt chính), dấu phụ (sự khác biệt thứ cấp), trường hợp và biến thể (sự khác biệt cấp ba). Sự khác biệt giữa các ký tự cơ sở được ưu tiên hơn sự khác biệt thứ cấp, được ưu tiên hơn sự khác biệt cấp ba