Giới hạn của một tài liệu trong MongoDB là gì?

Mỗi chỉ mục chiếm một số không gian cũng như gây ra chi phí trên mỗi lần chèn, cập nhật và xóa. Vì vậy, nếu bạn hiếm khi sử dụng bộ sưu tập của mình cho các thao tác đọc, bạn không nên sử dụng các chỉ mục

Sử dụng RAM

Vì các chỉ mục được lưu trữ trong RAM, bạn nên đảm bảo rằng tổng kích thước của chỉ mục không vượt quá giới hạn RAM. Nếu tổng kích thước tăng kích thước RAM, nó sẽ bắt đầu xóa một số chỉ mục, gây giảm hiệu suất

Giới hạn truy vấn

Lập chỉ mục không thể được sử dụng trong các truy vấn sử dụng -

  • Biểu thức chính quy hoặc toán tử phủ định như $nin, $not, v.v.
  • Các toán tử số học như $mod, v.v.
  • mệnh đề $where

Do đó, luôn luôn nên kiểm tra việc sử dụng chỉ mục cho các truy vấn của bạn

Giới hạn chính của chỉ mục

Bắt đầu từ phiên bản 2. 6, MongoDB sẽ không tạo chỉ mục nếu giá trị của trường chỉ mục hiện tại vượt quá giới hạn khóa chỉ mục

Chèn tài liệu vượt quá giới hạn khóa chỉ mục

MongoDB sẽ không chèn bất kỳ tài liệu nào vào bộ sưu tập được lập chỉ mục nếu giá trị trường được lập chỉ mục của tài liệu này vượt quá giới hạn khóa chỉ mục. Tương tự với các tiện ích mongorestore và mongoimport

Trước khi chúng ta nói về những ưu điểm và nhược điểm của MongoDB, điều quan trọng là phải biết MongoDB là gì và hiểu cơ bản về các tính năng và hoạt động của nó. Nếu bạn chưa biết MongoDB là gì, bạn có thể muốn bắt đầu với bài đăng này. MongoDB cho người mới bắt đầu – Giới thiệu về MongoDB, sau đó quay lại đây

MongoDb là gì?

Rất ngắn gọn, MongoDB là một cơ sở dữ liệu nguồn mở sử dụng lược đồ lưu trữ dữ liệu có thể được tùy chỉnh (thêm về điều này trong bài viết)

Nó được phát hành vào năm 2007 và ngày nay là một trong những cơ sở dữ liệu phi quan hệ phổ biến nhất, nó được xây dựng với khả năng mở rộng, tính khả dụng tối đa và hiệu suất tốt, và kể từ năm 2022, nó hiện đang ở phiên bản 5. 0

Và tôi sẽ bắt đầu hỏi, sự khác biệt giữa cơ sở dữ liệu quan hệ và không quan hệ là gì? . Thông tin này được các ứng dụng truy xuất ở định dạng JSON

NoSQL có nghĩa là 'Không chỉ SQL' và có nhiều loại trong đó, chẳng hạn như cột, tài liệu, biểu đồ, cặp khóa-giá trị, v.v. ;

Trong cơ sở dữ liệu quan hệ, các nhà phát triển cần dịch các bảng sang mô hình đối tượng để làm cho chúng phù hợp để sử dụng trong ứng dụng;

Linh hoạt hơn với các tài liệu

Như đã đề cập trước đây MongoDB sử dụng tài liệu làm kho lưu trữ dữ liệu cơ sở, điều này cho phép hầu hết mọi cấu trúc dữ liệu được mô hình hóa và thao tác dễ dàng. Định dạng dữ liệu BSON của MongoDB, lấy cảm hứng từ JSON, cho phép bạn có các đối tượng trong một bộ sưu tập với các tập hợp trường khác nhau, ví dụ: nếu người dùng đã kết hôn, chúng ta cũng nên lưu tên của vợ/chồng, nếu người dùng độc thân thì trường này đơn giản là không'

Giới hạn của một tài liệu trong MongoDB là gì?

Tính linh hoạt này là một lợi thế đáng kinh ngạc khi xử lý dữ liệu trong thế giới thực và thay đổi các quy tắc hoặc yêu cầu kinh doanh

Được hỗ trợ rộng rãi và truy cập riêng trong mã

Hầu hết các cơ sở dữ liệu buộc chúng tôi phải sử dụng các khung, trình bao bọc hoặc các công cụ nặng như ORM (Trình ánh xạ quan hệ đối tượng) để lấy dữ liệu ở dạng Đối tượng để sử dụng trong các chương trình

MongoDB quyết định lưu trữ và biểu diễn dữ liệu ở định dạng tài liệu có nghĩa là bạn có thể truy cập nó từ bất kỳ ngôn ngữ nào, trong các cấu trúc dữ liệu có nguồn gốc từ ngôn ngữ đó (e. g. Từ điển trong Python, Đối tượng trong JavaScript, Bản đồ trong Java, v.v.)

Tuy nhiên, bạn sẽ cần một trình điều khiển (Thư viện tạo kết nối giữa ứng dụng của bạn và cơ sở dữ liệu MongoDB), bạn có thể kiểm tra danh sách với tất cả các trình điều khiển MongoDB chính thức trên liên kết này

Trong ví dụ dưới đây, chúng ta có thể thấy cách bạn có thể thực hiện để kết nối và lưu các bản ghi mới vào cơ sở dữ liệu MongoDB bằng PHP

demo->students;

$result = $collection->insertOne( [ 'name' => 'Gustavo', 'group' => '9A' ] );
echo "New student ID: '{$resultado->getInsertedId()}'";

$result = $collection->insertOne( [ 'name' => 'Tomas', 'group' => '9C', 'shift' => 'morning' ] );
echo "New student ID: '{$result->getInsertedId()}'";
?>

Trong ví dụ này, tôi mở một kết nối đến cơ sở dữ liệu có tên là demo và tìm bộ sưu tập students, trong bộ sưu tập này tôi chèn hai bản ghi mới và như bạn nhận thấy bản ghi 2 có các tham số khác so với bản ghi 1, đây là điều hoàn toàn có thể chấp nhận được với MongoDB

Hiệu suất cao

Nhờ mô hình tài liệu được sử dụng trong MongoDB, thông tin có thể được nhúng trong một tài liệu duy nhất thay vì dựa vào các hoạt động JOIN của cơ sở dữ liệu quan hệ truyền thống

Ví dụ: trong mô hình cơ sở dữ liệu truyền thống, chúng tôi sẽ có một bảng cho khách hàng của mình và một bảng riêng có địa chỉ của những khách hàng đó

Chúng ta có thể dễ dàng tái tạo mô hình tương tự này trong MongoDB bằng cách tạo hai bộ sưu tập, một cho máy khách và một cho địa chỉ. Và để tạo tham chiếu giữa các tài liệu, mỗi địa chỉ sẽ có một tham số chịu trách nhiệm tạo liên kết, trong trường hợp này là

demo->students;

$result = $collection->insertMany( 
            [ 'name' => 'Gustavo', 'group' => '9A' ], 
            [ 'name' => 'Tomas', 'group' => '9C', 'shift' => 'morning' ] 
);
?>
0

Với MongoDB, chúng ta có thể đơn giản hóa và hợp nhất tất cả thông tin thành một tài liệu theo cách đơn giản hơn nhiều bằng cách sử dụng Mẫu tài liệu nhúng, trong trường hợp này, việc tổng hợp các địa chỉ máy khách vào tài liệu máy khách là hợp lý nhất

Điều này bổ sung các truy vấn nhanh hơn nhiều và trả về tất cả thông tin cần thiết trong một lần gọi tới cơ sở dữ liệu, xem tài liệu mới sẽ trông như thế nào khi tổng hợp các địa chỉ

Khi nói đến hiệu suất ghi, MongoDB cung cấp chức năng chèn và cập nhật nhiều bản ghi cùng lúc với

demo->students;

$result = $collection->insertMany( 
            [ 'name' => 'Gustavo', 'group' => '9A' ], 
            [ 'name' => 'Tomas', 'group' => '9C', 'shift' => 'morning' ] 
);
?>
1 và
demo->students;

$result = $collection->insertMany( 
            [ 'name' => 'Gustavo', 'group' => '9A' ], 
            [ 'name' => 'Tomas', 'group' => '9C', 'shift' => 'morning' ] 
);
?>
2. Hai chức năng này giúp tăng hiệu suất đáng kể khi so sánh với ghi hàng loạt vào cơ sở dữ liệu truyền thống

Ví dụ của chúng tôi, nơi chúng tôi đã tạo hai bản ghi sinh viên trong hai cuộc gọi riêng biệt của phương pháp

demo->students;

$result = $collection->insertMany( 
            [ 'name' => 'Gustavo', 'group' => '9A' ], 
            [ 'name' => 'Tomas', 'group' => '9C', 'shift' => 'morning' ] 
);
?>
0, chúng tôi có thể đã viết bằng cách sử dụng phương pháp
demo->students;

$result = $collection->insertMany( 
            [ 'name' => 'Gustavo', 'group' => '9A' ], 
            [ 'name' => 'Tomas', 'group' => '9C', 'shift' => 'morning' ] 
);
?>
1 như bạn có thể thấy bên dưới

demo->students;

$result = $collection->insertMany( 
            [ 'name' => 'Gustavo', 'group' => '9A' ], 
            [ 'name' => 'Tomas', 'group' => '9C', 'shift' => 'morning' ] 
);
?>

Một ưu điểm lớn khác của MongoDB là nó lưu trữ hầu hết dữ liệu trong RAM thay vì đĩa cứng, cho phép hiệu suất nhanh hơn khi thực hiện các truy vấn. Để xử lý nhanh nhất, hãy đảm bảo rằng các chỉ mục của bạn hoàn toàn phù hợp với RAM để hệ thống có thể tránh đọc chỉ mục từ đĩa

MongoDB hỗ trợ giao dịch

Cơ sở dữ liệu giao dịch là cơ sở dữ liệu hỗ trợ các giao dịch ACID (tính nguyên tử, tính nhất quán, tính cô lập và độ bền). Giao dịch là một tập hợp các thao tác đọc và ghi cơ sở dữ liệu trong đó tất cả hoặc không thao tác nào thành công

Các giao dịch tài liệu đơn lẻ luôn là nguyên tử trong MongoDB. MongoDB đã thêm hỗ trợ cho các giao dịch ACID đa tài liệu trong phiên bản 4. 0 và mở rộng hỗ trợ đó để bao gồm các giao dịch phân tán trong phiên bản 4. 2

Các đảm bảo do MongoDB cung cấp đảm bảo cách ly hoàn toàn trong khi tài liệu được cập nhật;

Với các giao dịch lập mô hình phù hợp bao gồm nhiều bản ghi không phải lúc nào cũng cần thiết. Dữ liệu trong MongoDB, như chúng ta đã thấy trước đó, có thể được liên kết và được mô hình hóa trong một cấu trúc dữ liệu duy nhất bằng nhiều loại khác nhau, bao gồm các tài liệu phụ và mảng, bằng cách này, người dùng sẽ nhận được sự đảm bảo về tính toàn vẹn của dữ liệu giống như dữ liệu được cung cấp bởi cơ sở dữ liệu quan hệ

Cấu trúc thân thiện với thay đổi

Nếu bạn đã quen với việc phải gỡ bỏ trang web hoặc ứng dụng của mình để thay đổi cấu trúc dữ liệu, thì bạn thật may mắn. MongoDB được thiết kế để thay đổi

Không giống như cơ sở dữ liệu SQL, nơi bạn phải xác định và khai báo lược đồ của bảng trước khi chèn dữ liệu, theo mặc định, bộ sưu tập MongoDB không yêu cầu tài liệu của bạn phải có cùng lược đồ

Điều này có nghĩa là không có thời gian ngừng hoạt động để thay đổi lược đồ, bạn có thể bắt đầu ghi dữ liệu mới với các cấu trúc khác nhau bất kỳ lúc nào mà không làm gián đoạn hoạt động của mình

Tính linh hoạt này giúp dễ dàng ánh xạ tài liệu tới một thực thể hoặc đối tượng. Mỗi tài liệu có thể được ánh xạ với các trường của một Đối tượng, ngay cả khi tài liệu đó có sự thay đổi đáng kể so với các tài liệu khác trong bộ sưu tập

Giống như bất kỳ phần mềm nào, MongoDB cũng có nhược điểm của nó. Hầu hết chúng thực sự là những hạn chế có thể được khắc phục hoặc cải thiện trong tương lai, nhưng ở thời điểm hiện tại (2022), một số điểm tôi sẽ đề cập dưới đây có thể trở thành vấn đề đối với những ai đang nghĩ đến việc sử dụng MongoDB

Kích thước của tài liệu BSON

Kích thước tối đa của tài liệu BSON là 16 megabyte

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

Giới hạn lồng nhau trong tài liệu BSON

MongoDB hỗ trợ không quá 100 cấp độ lồng nhau cho các tài liệu BSON. Mỗi đối tượng hoặc mảng thêm một cấp

Để minh họa cho hạn chế này

{
  "_id": 1,
  "Universe": {
    "Virgo Cluster": [
      {
        "Virgo Supercluster": {
          "Local Group": {
            "Milky Way": {
              "Solar System": [
                {
                  "Earth": [
                    { "Asia": ["Countries", "..."], "Europe": ["Countries", ".."], "America": ["Countries", "..."] }
                  ]
                }
              ]
            }
          }
        }
      },
      { "Laniakea Supercluster": "..." }
    ]
  }
}

Hoạt động sắp xếp hạn chế

Nếu MongoDB không thể sử dụng chỉ mục hoặc các chỉ mục để sắp xếp các trường trong tài liệu, MongoDB sẽ bắt đầu thao tác sắp xếp dữ liệu chặn

Tên đề cập đến một hoạt động

demo->students;

$result = $collection->insertMany( 
            [ 'name' => 'Gustavo', 'group' => '9A' ], 
            [ 'name' => 'Tomas', 'group' => '9C', 'shift' => 'morning' ] 
);
?>
2 trong đó tất cả các tài liệu trong bộ sưu tập được đọc để trả về một tài liệu đầu ra, trong trường hợp đó, luồng dữ liệu cho truy vấn cụ thể đó phải bị chặn

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, MongoDB sẽ trả về lỗi trừ khi truy vấn chỉ định

demo->students;

$result = $collection->insertMany( 
            [ 'name' => 'Gustavo', 'group' => '9A' ], 
            [ 'name' => 'Tomas', 'group' => '9C', 'shift' => 'morning' ] 
);
?>
3 (Mới trong MongoDB 4. 4)

demo->students;

$result = $collection->insertMany( 
            [ 'name' => 'Gustavo', 'group' => '9A' ], 
            [ 'name' => 'Tomas', 'group' => '9C', 'shift' => 'morning' ] 
);
?>
4 cho phép MongoDB sử dụng các tệp đĩa tạm thời để lưu trữ dữ liệu vượt quá giới hạn bộ nhớ 100 megabyte trong khi xử lý thao tác sắp xếp

Kích thước tối đa của tài liệu trong MongoDB là bao nhiêu?

Kích thước tối đa mà một tài liệu riêng lẻ có thể có trong MongoDB là 16 MB với độ sâu lồng nhau là 100 cấp độ . Chỉnh sửa. Không có kích thước tối đa cho một cơ sở dữ liệu MongoDB riêng lẻ.

Phương pháp nào giới hạn số lượng tài liệu trong tập kết quả trong MongoDB?

Sử dụng phương thức limit() trên con trỏ để chỉ định số tài liệu tối đa mà con trỏ sẽ trả về. limit() tương tự như câu lệnh LIMIT trong cơ sở dữ liệu SQL.

Tài liệu trong MongoDB là gì?

Tài liệu - một cách để sắp xếp và lưu trữ dữ liệu dưới dạng một tập hợp các cặp trường-giá trị . Trường - một mã định danh duy nhất cho một điểm dữ liệu. Giá trị - dữ liệu liên quan đến một mã định danh nhất định. Bộ sưu tập - một kho tài liệu có tổ chức trong MongoDB, thường có các trường chung giữa các tài liệu.

Loại tài liệu nào được MongoDB hỗ trợ?

MongoDB lưu trữ các bản ghi dữ liệu dưới dạng tài liệu BSON . BSON là biểu diễn nhị phân của tài liệu JSON, mặc dù nó chứa nhiều loại dữ liệu hơn JSON.