MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Có gì mới trong MongoDB 4.2

Các bản cập nhật cơ sở dữ liệu đi kèm với các tính năng được cải thiện về hiệu suất, bảo mật và với các tính năng tích hợp mới. Bạn nên thử nghiệm một phiên bản mới trước khi triển khai nó vào sản xuất, chỉ để đảm bảo rằng nó phù hợp với nhu cầu của bạn và không có khả năng xảy ra sự cố.

Xem xét nhiều sản phẩm, những sản phẩm trước phiên bản nhỏ đầu tiên của phiên bản chính mới có các bản sửa lỗi quan trọng nhất. Ví dụ:tôi muốn có phiên bản MongoDB 4.2.1 trong sản xuất vài ngày sau khi phát hành hơn là phiên bản 4.2.0.

Trong blog này, chúng ta sẽ thảo luận về những gì đã được bao gồm và những cải tiến nào đã được thực hiện cho MongoDB phiên bản 4.2

Có gì mới trong MongoDB 4.2

  1. Giao dịch phân tán
  2. Chỉ mục ký tự đại diện
  3. Đọc và ghi có thể thử lại
  4. Mã hóa cấp trường phía máy khách tự động.
  5. Ngôn ngữ truy vấn được cải thiện để cập nhật nhanh chóng
  6. Chế độ xem cụ thể hóa theo yêu cầu
  7. Các hoạt động bảo trì hiện đại

Giao dịch được phân phối

Giao dịch là các tính năng cơ sở dữ liệu quan trọng đảm bảo tính nhất quán và toàn vẹn của dữ liệu, đặc biệt là các tính năng đảm bảo các thủ tục ACID. MongoDB phiên bản 4.2 hiện hỗ trợ các giao dịch đa tài liệu trên các tập hợp bản sao và một cụm phân đoạn thông qua phương pháp tiếp cận giao dịch phân tán. Cú pháp tương tự để sử dụng các giao dịch đã được duy trì như phiên bản 4.0 trước đó.

Tuy nhiên, thông số kỹ thuật của trình điều khiển ứng dụng khách đã thay đổi một chút, do đó nếu có ý định sử dụng các giao dịch trong MongoDB 4.2, bạn phải nâng cấp trình điều khiển lên phiên bản tương thích với máy chủ 4.2.

Phiên bản này không giới hạn kích thước của giao dịch về mức sử dụng bộ nhớ mà chỉ phụ thuộc vào kích thước phần cứng của bạn và khả năng xử lý phần cứng.

Hiện có thể chỉ định lại ngôn ngữ cụm toàn cầu với phiên bản 4.2. Điều này có nghĩa là, đối với việc triển khai phân vùng địa lý, nếu người dùng sống ở khu vực A chuyển đến khu vực B, bằng cách thay đổi giá trị của trường vị trí của họ, dữ liệu có thể được tự động di chuyển từ khu vực A sang B thông qua một giao dịch.

Hệ thống sharding hiện cho phép người ta thay đổi khóa phân đoạn trái với phiên bản trước. Theo nghĩa đen, khi khóa phân đoạn được thay đổi, nó tương đương với việc di chuyển tài liệu sang phân đoạn khác. Trong phiên bản này, MongoDB kết thúc bản cập nhật này và nếu tài liệu cần được chuyển từ phân đoạn này sang phân đoạn khác, bản cập nhật sẽ được thực hiện bên trong giao dịch theo cách nền.

Sử dụng các giao dịch không phải là cách tiếp cận được khuyến khích vì chúng làm giảm hiệu suất cơ sở dữ liệu, đặc biệt nếu chúng xảy ra nhiều lần. Trong một khoảng thời gian giao dịch, có một cửa sổ bị kéo dài cho các hoạt động có thể gây ra xung đột khi thực hiện ghi vào tài liệu bị ảnh hưởng. Khi một giao dịch có thể được thử lại, có thể có một bản cập nhật được thực hiện cho tài liệu trước khi thử lại này và bất cứ khi nào việc thử lại xảy ra, nó có thể xử lý tài liệu cũ hơn là phiên bản tài liệu mới nhất. Việc thử lại rõ ràng gây tốn kém chi phí xử lý hơn bên cạnh việc tăng thời gian ngừng hoạt động của ứng dụng do độ trễ ngày càng tăng.

Một phương pháp hay để sử dụng các giao dịch bao gồm:

  1. Tránh sử dụng các truy vấn chưa được lập chỉ mục bên trong một giao dịch như một cách đảm bảo Op sẽ không bị chậm.
  2. Giao dịch của bạn phải có một số tài liệu.

Với tính năng nhúng và định dạng lược đồ động MongoDB, bạn có thể chọn đặt tất cả các trường trong cùng một bộ sưu tập để tránh phải sử dụng giao dịch làm thước đo đầu tiên.

Chỉ mục ký tự đại diện

Chỉ mục ký tự đại diện được giới thiệu trong MongoDB phiên bản 4.2 để nâng cao các truy vấn đối với các trường tùy ý hoặc các trường không được biết trước tên, bằng cách lập chỉ mục toàn bộ tài liệu hoặc tài liệu con. Chúng không nhằm thay thế các chỉ mục dựa trên khối lượng công việc nhưng thích hợp làm việc với dữ liệu liên quan đến mẫu đa hình. Mẫu đa hình là nơi tất cả các tài liệu trong một bộ sưu tập đều giống nhau nhưng không có cấu trúc giống hệt nhau. Các mẫu dữ liệu đa hình có thể được tạo từ ứng dụng liên quan đến danh mục sản phẩm hoặc dữ liệu xã hội. Dưới đây là ví dụ về dữ liệu thu thập Đa hình

{

Sport: ‘Chess’,

playerName: ‘John Mah’,

Career_earning: {amount: NumberDecimal(“3000”), currency: “EUR”},

gamesPlayed:25,

career_titles:10

},

{

Sport: Tennis,

playerName: ‘Semenya Jones,

Career_earning: {amount: NumberDecimal(“34545”), currency: “USD”},

Event: {

name:”Olympics”,

career_titles:10,

career_tournaments:14

}

Bằng cách lập chỉ mục toàn bộ tài liệu bằng chỉ mục Ký tự đại diện, bạn có thể thực hiện truy vấn bằng cách sử dụng bất kỳ trường tùy ý nào làm chỉ mục.

Để tạo chỉ mục Ký tự đại diện

$db.collection.createIndex({“fieldA.$**”: 1})

Nếu trường được chọn là một tài liệu hoặc một mảng lồng nhau, chỉ mục Ký tự đại diện sẽ truy xuất vào tài liệu và lưu trữ giá trị cho tất cả các trường trong tài liệu hoặc mảng.

Đọc và ghi có thể thử lại

Thông thường, một cơ sở dữ liệu có thể xảy ra một số trường hợp mạng tạm thời thường xuyên có thể dẫn đến truy vấn không được thực thi một phần hoặc toàn bộ. Những lỗi mạng này có thể không nghiêm trọng đến mức tạo cơ hội cho việc thử lại các truy vấn này sau khi được kết nối lại. Bắt đầu với MongoDB 4.2, cấu hình thử lại được bật theo mặc định. Trình điều khiển MongoDB có thể thử lại các lần đọc và ghi không thành công đối với một số giao dịch nhất định bất cứ khi nào họ gặp phải lỗi mạng nhỏ hoặc đúng hơn là khi họ không thể tìm thấy một số chính lành mạnh trong nhóm phân mảnh / bản sao. Tuy nhiên, nếu bạn không muốn ghi có thể thử lại, bạn có thể tắt chúng một cách rõ ràng trong cấu hình của mình nhưng tôi không tìm thấy lý do thuyết phục tại sao nên tắt chúng.

Tính năng này nhằm đảm bảo rằng trong mọi trường hợp cơ sở hạ tầng MongoDB thay đổi, mã ứng dụng sẽ không bị ảnh hưởng. Về một ví dụ được giải thích bởi Eliot Horowitz, Người đồng sáng lập MongoDB, cho một trang web thực hiện 20 hoạt động cơ sở dữ liệu khác nhau, thay vì tải lại toàn bộ hoặc phải quấn toàn bộ trang web trong một số loại vòng lặp, trình điều khiển nằm dưới vỏ chỉ có thể quyết định thử lại hoạt động. Bất cứ khi nào ghi không thành công, nó sẽ tự động thử lại và sẽ có hợp đồng với máy chủ để đảm bảo rằng mỗi lần ghi chỉ xảy ra một lần.

Việc ghi có thể thử lại chỉ thực hiện một lần thử lại duy nhất giúp giải quyết các cuộc bầu cử tập hợp bản sao và lỗi mạng tạm thời chứ không phải lỗi mạng liên tục.

Các ghi có thể thử lại không giải quyết các trường hợp mà thời gian chuyển đổi dự phòng vượt quá giá trị serverSelectionTimoutMs trong cấu hình tham số.

Với phiên bản MongoDB này, người ta có thể cập nhật các giá trị khóa của phân đoạn tài liệu (ngoại trừ nếu phân đoạn là trường _id bất biến) bằng cách phát hành một tài liệu findAndModify / hoạt động cập nhật trong một giao dịch hoặc dưới dạng một bản ghi có thể thử lại .

MongoDB phiên bản 4.2 hiện có thể thử lại thao tác upert một tài liệu (tức là upert:true và multi:false) có thể không thành công do lỗi khóa trùng lặp nếu thao tác đáp ứng các điều kiện chính sau:

  1. Tập hợp mục tiêu chứa một chỉ mục duy nhất gây ra lỗi khóa trùng lặp.
  2. Thao tác cập nhật sẽ không sửa đổi bất kỳ trường nào trong vị từ truy vấn.
  3. Điều kiện đối sánh cập nhật là một vị từ bình đẳng duy nhất {field:“value”} hoặc một AND lôgic của các vị từ bình đẳng {đệ:“value”, field0:“value0”}
  4. Tập hợp các trường trong mẫu khóa chỉ mục duy nhất khớp với tập hợp các trường trong vị từ truy vấn cập nhật.

Mã hóa cấp trường phía máy khách tự động

MongoDB phiên bản 4.2 đi kèm với mã hóa Cấp độ trường phía máy khách tự động (CSFLE), một tính năng cho phép các nhà phát triển mã hóa có chọn lọc các trường riêng lẻ của tài liệu ở phía máy khách trước khi nó được gửi đến máy chủ. Do đó, dữ liệu được mã hóa được giữ kín với các nhà cung cấp lưu trữ cơ sở dữ liệu và bất kỳ người dùng nào có thể có quyền truy cập trực tiếp vào cơ sở dữ liệu.

Chỉ các ứng dụng có quyền truy cập vào các khóa mã hóa chính xác mới có thể giải mã và đọc dữ liệu được bảo vệ. Trong trường hợp khóa mã hóa bị xóa, tất cả dữ liệu đã được mã hóa sẽ không thể đọc được.

Lưu ý:tính năng này chỉ khả dụng với MongoDB Enterprise.

Ngôn ngữ truy vấn được cải thiện để cập nhật nhanh

MongoDB phiên bản 4.2 cung cấp ngôn ngữ truy vấn phong phú hơn các phiên bản tiền nhiệm. Nó hiện hỗ trợ các tổng hợp và các hoạt động ca sử dụng hiện đại dọc theo các dòng tìm kiếm dựa trên địa lý, tìm kiếm đồ thị và tìm kiếm văn bản. Nó đã tích hợp một công cụ tìm kiếm của bên thứ ba giúp tìm kiếm nhanh hơn khi xem xét rằng công cụ tìm kiếm đang chạy trên một quy trình / máy chủ khác. Điều này thường cải thiện hiệu suất cơ sở dữ liệu trái ngược với nếu tất cả các tìm kiếm được thực hiện cho quy trình mongod, điều này sẽ làm cho độ trễ hoạt động cơ sở dữ liệu dễ thay đổi bất cứ khi nào công cụ tìm kiếm lập chỉ mục lại.

Với phiên bản này, giờ đây bạn có thể xử lý mảng, tính tổng và các phép toán khác trực tiếp thông qua câu lệnh cập nhật.

Số lượt xem cụ thể hóa theo yêu cầu

Khung đường ống tổng hợp dữ liệu trong MongoDB là một tính năng tuyệt vời với các giai đoạn khác nhau để chuyển đổi tài liệu sang một số trạng thái mong muốn. MongoDB phiên bản 4.2 giới thiệu một giai đoạn mới $ merge mà đối với tôi, tôi sẽ nói rằng nó đã giúp tôi tiết kiệm thời gian làm việc với kết quả cuối cùng cần được lưu trữ trong một bộ sưu tập. Ban đầu, giai đoạn $ out cho phép tạo một bộ sưu tập mới dựa trên tổng hợp và điền vào bộ sưu tập với kết quả thu được. Nếu bộ sưu tập đã tồn tại, nó sẽ ghi đè bộ sưu tập bằng các kết quả mới trái với giai đoạn hợp nhất $ chỉ kết hợp các kết quả đường ống vào một đầu ra hiện có thay vì thay thế hoàn toàn bộ sưu tập. Mỗi lần tạo lại toàn bộ bộ sưu tập với giai đoạn $ out sẽ tiêu tốn rất nhiều CPU và IO, điều này có thể làm giảm hiệu suất cơ sở dữ liệu. Do đó, nội dung đầu ra sẽ được cập nhật kịp thời cho phép người dùng tạo các chế độ xem cụ thể hóa theo yêu cầu

Hoạt động Bảo trì Hiện đại

Các nhà phát triển hiện có thể có trải nghiệm hoạt động tuyệt vời với MongoDB phiên bản 4.2 với các tính năng tích hợp nhằm nâng cao tính sẵn sàng cao, chiến lược sao lưu được quản lý trên đám mây, cải thiện sức mạnh giám sát và hệ thống cảnh báo. MongoDB Atlas và MongoDB Ops Manager là những nền tảng cung cấp các tính năng này. Cái thứ hai đã được gắn nhãn là tốt nhất để chạy MongoDB trên doanh nghiệp. Nó cũng đã được tích hợp với nhà điều hành Kubernetes cho những người dùng tại chỗ đang chuyển sang đám mây riêng. Giao diện này cho phép một người điều khiển trực tiếp Ops Manager.

Có một số thay đổi nội bộ được thực hiện đối với MongoDB phiên bản 4.2, bao gồm:

  1. Liệt kê các con trỏ đang mở.
  2. Xóa công cụ lưu trữ MMAPv1.
  3. Cải tiến sửa chữa tệp dữ liệu WiredTiger.
  4. Các trường chẩn đoán hiện có thể có queryHash
  5. Chuỗi tự động tách cho các nút mongos đã bị xóa.

Kết luận

MongoDB phiên bản 4.2 đi kèm với một số cải tiến về bảo mật và hiệu suất cơ sở dữ liệu. Nó đã bao gồm Mã hóa cấp độ trường phía máy khách tự động đảm bảo dữ liệu được bảo vệ từ góc độ máy khách. Các tính năng khác như công cụ tìm kiếm của bên thứ ba và bao gồm giai đoạn hợp nhất $ trong khuôn khổ tổng hợp giúp cải thiện một số hiệu suất cơ sở dữ liệu. Trước khi đưa phiên bản này vào sản xuất, hãy đảm bảo rằng tất cả các nhu cầu của bạn đều được giải quyết đầy đủ.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ setDifference

  2. Lỗi khi nâng cấp Mongodb từ 3.2 lên 3.6

  3. Kiến trúc ứng dụng dựa trên Mongoose

  4. MongoDB giới hạn kích thước lưu trữ?

  5. Tài liệu được nhúng không có Mảng?