Nhược điểm của mongodb so với rdbms

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'

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

Nhược điểm của MongoDB so với cơ sở dữ liệu MySQL là gì?

Bất lợi khi sử dụng MongoDB . Trong MongoDB, không có điều khoản nào cho Thủ tục lưu trữ hoặc chức năng, vì vậy bạn không thể triển khai bất kỳ logic nghiệp vụ nào ở cấp cơ sở dữ liệu, điều mà bạn có thể thực hiện trong bất kỳ hệ thống RDBMS nào. MongoDB is not strong ACID [Atomic, Consistency, Isolation & Durability] when compared to many other RDBMS systems. In MongoDB, there is no provision for Stored Procedure or functions, so you can't implement any business logic in the database level, which you can do in any RDBMS systems.

Ưu điểm và nhược điểm của việc sử dụng MongoDB là gì?

Hãy bắt đầu với những mặt tích cực trong danh sách ưu và nhược điểm MongoDB của chúng tôi. .
Nó cung cấp tốc độ / hiệu suất cao. Do tính chất định hướng tài liệu, MongoDB có thể cung cấp tốc độ cao hơn cơ sở dữ liệu quan hệ truyền thống. .
nó linh hoạt. .
Bạn nhận được sharding. .
Bạn có quyền truy cập vào hỗ trợ kỹ thuật. .
Tham gia là khó xử. .
Sử dụng bộ nhớ cao

RDBMS hay MongoDB cái nào tốt hơn?

MongoDB nhanh hơn gần 100 lần so với hệ thống cơ sở dữ liệu truyền thống như RDBMS , chậm hơn so với cơ sở dữ liệu NoSQL. Không có hỗ trợ cho các phép nối phức tạp trong MongoDB nhưng RDBMS hỗ trợ các phép nối phức tạp có thể khó hiểu và mất quá nhiều thời gian để thực hiện.

Nhược điểm của NoSQL so với RDBMS truyền thống là gì?

Những nhược điểm của cơ sở dữ liệu NoSQL là gì? . Với thiết kế lược đồ phù hợp, tính nguyên tử của một bản ghi có thể chấp nhận được đối với nhiều ứng dụng. they don't support ACID [atomicity, consistency, isolation, durability] transactions across multiple documents. With appropriate schema design, single-record atomicity is acceptable for lots of applications.

Chủ Đề