So sánh MongoDB và MySQL
Tổng quan Cơ sở dữ liệu quan hệ đã là nền tảng của các ứng dụng doanh nghiệp trong nhiều thập kỷ, và kể từ khi phát hành của MySQL vào năm 1995, nó đã trở thành một lựa chọn phổ biến và không tốn kém, đặc biệt là một phần của nền tảng LAMP phổ biến để củng cố các ứng dụng web ban đầu. Ngày nay, các ...
Tổng quan Cơ sở dữ liệu quan hệ đã là nền tảng của các ứng dụng doanh nghiệp trong nhiều thập kỷ, và kể từ khi phát hành của MySQL vào năm 1995, nó đã trở thành một lựa chọn phổ biến và không tốn kém, đặc biệt là một phần của nền tảng LAMP phổ biến để củng cố các ứng dụng web ban đầu. Ngày nay, các doanh nghiệp hiện đại đang nghĩ đến những cách tốt hơn để lưu trữ và quản lý dữ liệu - cho dù đó là để có được cái nhìn sâu sắc hơn về khách hàng, thích nghi với những thay đổi của người dùng hoặc đánh bại các đối thủ cạnh tranh với các ứng dụng và mô hình kinh doanh mới. Kết quả là nhiều giả định đã thúc đẩy sự phát triển của các cơ sở dữ liệu quan hệ trước đó đã thay đổi:
- Yêu cầu năng suất của developers cao hơn và thời gian nhanh hơn để tiếp thị, với các mô hình dữ liệu truyền thống cứng nhắc truyền thống và sự phát triển của các ứng dụng nguyên khối tạo ra các phương pháp nhanh, microservices và DevOps, nén chu kỳ phát hành từ tháng, năm sang ngày và tuần.
- Sự cần thiết phải quản lý các loại dữ liệu mới, nhanh chóng thay đổi dữ liệu - cấu trúc, bán cấu trúc, và dữ liệu đa hình được tạo ra bởi các lớp học mới của ứng dụng web, di động, xã hội và IoT.
- Sự chuyển đổi bán buôn sang các hệ thống phân tán và điện toán đám mây, cho phép các developers khai thác cơ sở hạ tầng tính toán và lưu trữ theo yêu cầu, có khả năng mở rộng cao với khả năng phục vụ khán giả bất cứ nơi nào họ làm việc và chơi khắp thế giới trong khi đáp ứng được toàn bộ yêu cầu về quy định cho chủ quyền dữ liệu.
Kết quả là các cơ sở dữ liệu không liên quan hoặc "NoSQL", như MongoDB, đã xuất hiện để đáp ứng các yêu cầu của các ứng dụng mới và hiện đại hóa khối lượng công việc hiện tại. Hỗ trợ cho các giao dịch ACID nhiều tài liệu, được lên kế hoạch cho MongoDB 4.0 vào mùa hè năm 2018, sẽ làm cho các developers dễ dàng hơn trong việc giải quyết các trường hợp sử dụng hiện tại hoặc trong tương lai sẽ gặp khó khăn với MySQL. Bài viết này cung cấp tổng quan về MySQL và MongoDB, và các trường hợp sử dụng thích hợp cho mỗi trường hợp.
MySQL là một hệ quản lý cơ sở dữ liệu quan hệ mã nguồn mở phổ biến (RDBMS) được phát triển, phân phối và hỗ trợ bởi Oracle Corporation. Giống như các hệ thống quan hệ khác, MySQL lưu trữ dữ liệu trong bảng và sử dụng ngôn ngữ truy vấn có cấu trúc (SQL) để truy cập cơ sở dữ liệu. Trong MySQL, bạn định nghĩa sơ đồ cơ sở dữ liệu của bạn dựa trên yêu cầu của bạn và thiết lập các quy tắc để điều chỉnh mối quan hệ giữa các trường trong bảng của bạn. Bất kỳ thay đổi nào trong lược đồ đòi hỏi một thủ tục chuyển đổi có thể làm cho cơ sở dữ liệu ngoại tuyến hoặc giảm đáng kể hiệu suất ứng dụng.
MongoDB là một cơ sở dữ liệu nguồn mở, không quan hệ được phát triển bởi MongoDB, Inc MongoDB lưu trữ dữ liệu dưới dạng các tài liệu trong một biểu diễn nhị phân được gọi là BSON (Binary JSON). Thông tin liên quan được lưu trữ cùng nhau để truy cập truy vấn nhanh thông qua ngôn ngữ truy vấn MongoDB. Các trường có thể khác nhau từ tài liệu này sang tài liệu khác; không cần khai báo cấu trúc của tài liệu vào hệ thống - các tài liệu tự mô tả. Nếu một lĩnh vực mới cần phải được thêm vào một tài liệu, sau đó lĩnh vực này có thể được tạo ra mà không ảnh hưởng đến tất cả các tài liệu khác trong collection, mà không cần cập nhật một danh mục hệ thống trung ương, và không cần dùng hệ thống ngoại tuyến. Theo tùy chọn, tính hợp lệ của lược đồ có thể được sử dụng để thực thi kiểm soát quản trị dữ liệu đối với mỗi collection.
Mô hình dữ liệu tài liệu của MongoDB ánh xạ tự nhiên đến các đối tượng trong mã ứng dụng, làm cho các developers dễ dàng tìm hiểu và sử dụng. Tài liệu cung cấp cho bạn khả năng đại diện cho các mối quan hệ phân cấp để lưu trữ các mảng và các cấu trúc phức tạp khác một cách dễ dàng.
Các trình điều khiển nguyên bản, thông dụng được cung cấp cho 10 ngôn ngữ - cho phép truy vấn ngẫu nhiên, tập hợp theo thời gian thực và lập chỉ mục phong phú để cung cấp các cách lập trình mạnh mẽ để truy cập và phân tích dữ liệu của bất kỳ cấu trúc nào.
Bởi vì các tài liệu có thể kết hợp các dữ liệu có liên quan mà có thể được mô phỏng trên các bảng con-cha-con riêng biệt trong một lược đồ quan hệ, các hoạt động tài liệu nguyên tử của MongoDB đã cung cấp ngữ nghĩa giao dịch đáp ứng nhu cầu toàn vẹn dữ liệu của phần lớn các ứng dụng. Một hoặc nhiều trường có thể được viết bằng một thao tác đơn, bao gồm cập nhật cho nhiều tài liệu con và các phần tử của một mảng. Các bảo đảm được cung cấp bởi MongoDB đảm bảo sự cô lập hoàn toàn khi một tài liệu được cập nhật; bất kỳ lỗi nào làm cho thao tác quay trở lại để khách hàng nhận được chế độ xem thống nhất của tài liệu.
Không giống như MySQL và các cơ sở dữ liệu quan hệ khác, MongoDB được xây dựng trên kiến trúc hệ thống phân tán chứ không phải là một thiết kế đơn khối, đơn node. Kết quả là, MongoDB cung cấp out-of-the-box quy mô-ra và địa hoá dữ liệu với sharding tự động, và bản sao bộ để duy trì luôn sẵn có.
Nhiều khái niệm trong MySQL có các khái niệm tương tự gần nhau trong MongoDB. Bảng dưới đây phác thảo các khái niệm chung trên MySQL và MongoDB.
MySQL | MongoDB |
---|---|
ACID Transactions | ACID Transactions* |
Table | Collection |
Row | Document |
Column | Field |
Secondary Index | Secondary Index |
JOINs | Embedded documents, lookup & graphLookup |
GROUP_BY | Aggregation Pipeline |
- Các ACID transaction được lên kế hoạch cho MongoDB 4.0 *
Giống như MySQL, MongoDB cung cấp nhiều tính năng và chức năng vượt xa những tính năng được cung cấp bởi các kho dữ liệu NoSQL đơn giản. MongoDB có một ngôn ngữ truy vấn phong phú, các chỉ mục phụ có chức năng cao (bao gồm tìm kiếm văn bản và không gian địa lý), một khung kết hợp mạnh mẽ để phân tích dữ liệu, tìm kiếm nhiều mặt, xử lý biểu đồ và hơn thế nữa. Với MongoDB bạn cũng có thể sử dụng các tính năng này trên các loại dữ liệu đa dạng hơn là cơ sở dữ liệu quan hệ và bạn có thể thực hiện nó theo quy mô.
MySQL | MongoDB | NoSQL Data Store | |
---|---|---|---|
Open source | Yes | Yes | Yes |
ACID Transactions | Yes | Yes | No |
Mô hình dữ liệu linh hoạt và phong phú | No | Yes | chỉ hỗ trợ cấu trúc dữ liệu đơn giản |
Quản trị Schema | Yes | Yes | No |
Expressive joins, faceted search, graphs queries, powerful aggregations | Yes | Yes | No |
Idiomatic, native language drivers | No | Yes | No |
Horizontal scale-out with data locality controls | No | Yes | Partial: no controls over data locality |
Analytics and BI ready | Yes | Yes | No |
Enterprise grade security and mature management tools | Yes | Yes | No |
Database as a service on all major clouds | Yes | Yes | No |
Cả MySQL và MongoDB có một ngôn ngữ truy vấn phong phú. Một danh sách đầy đủ các báo cáo có thể được tìm thấy trong tài liệu MongoDB.
MySql | MongoDB |
---|---|
INSERT INTO users (user_id, age, status)VALUES ('bcd001', 45, 'A') | db.users.insert({ user_id: 'bcd001', age: 45, status: 'A'}) |
SELECT * FROM users | db.users.find() |
UPDATE users SET status = 'C' WHERE age > 25 | db.users.update( { age: { $gt: 25 } }, { $set: { status: 'C' } }, { multi: true }) |
So sánh hiệu suất của MongoDB vs MySQL là rất khó, vì cả hai hệ thống quản lý đều cực kỳ hữu ích và sự khác biệt cốt lõi là cơ sở của hoạt động cơ bản và cách tiếp cận ban đầu. Cả hai đều là mã nguồn mở và dễ dàng có sẵn, cũng như cả hai hệ thống cung cấp các phiên bản thương mại với hàng tấn các tính năng bổ sung.
Các tổ chức thuộc mọi quy mô đang áp dụng MongoDB vì nó cho phép họ xây dựng các ứng dụng nhanh hơn, xử lý nhiều loại dữ liệu đa dạng và quản lý các ứng dụng hiệu quả hơn theo quy mô. Việc phát triển được đơn giản hóa như các tài liệu MongoDB map tự nhiên cho các ngôn ngữ lập trình hướng đối tượng hiện đại. Sử dụng MongoDB loại bỏ lớp ánh xạ đối tượng phức tạp (ORM) dịch các đối tượng trong mã thành các bảng quan hệ. Mô hình dữ liệu linh hoạt của MongoDB cũng có nghĩa là lược đồ cơ sở dữ liệu của bạn có thể phát triển theo yêu cầu kinh doanh.
MongoDB cũng có thể được mở rộng trong và giữa nhiều trung tâm dữ liệu phân tán, cung cấp các cấp độ sẵn có và khả năng mở rộng mới trước đây không thể thực hiện được với các cơ sở dữ liệu quan hệ như MySQL. Khi triển khai của bạn phát triển về khối lượng dữ liệu và thông lượng, MongoDB dễ dàng cân bằng với không có thời gian chết, và không thay đổi ứng dụng của bạn. Ngược lại, để đạt được quy mô với MySQL thường đòi hỏi công việc kỹ thuật tùy chỉnh đáng kể.
Làm việc với dữ liệu dưới dạng tài liệu JSON linh hoạt hơn là các hàng và cột cứng nhắc đã được chứng minh là giúp các nhà phát triển di chuyển nhanh hơn. Không khó để tìm được những đội có thể đẩy nhanh chu kỳ phát triển lên 4 hoặc 5x sau khi chuyển sang MongoDB từ cơ sở dữ liệu quan hệ. Tại sao lại như vậy ?:
- Documents are natural : Tài liệu đại diện cho dữ liệu theo cùng cách mà các ứng dụng làm. Không giống như các hàng và cột dạng bảng của một cơ sở dữ liệu quan hệ, dữ liệu có thể được cấu trúc với các mảng và các tài liệu con - tương tự như các ứng dụng đại diện cho dữ liệu, như các danh sách và các thành viên / các biến thể. Điều này giúp đơn giản hóa và nhanh hơn cho các nhà phát triển mô hình hóa cách dữ liệu trong ứng dụng sẽ ánh xạ tới dữ liệu được lưu trữ trong cơ sở dữ liệu.
- Documents are flexible: Mỗi tài liệu có thể lưu trữ dữ liệu với các thuộc tính khác nhau từ các tài liệu khác. Ví dụ: hãy xem xét danh mục sản phẩm nơi một tài liệu lưu trữ chi tiết cho một mặt hàng quần áo nam sẽ lưu trữ các thuộc tính khác nhau từ tài liệu lưu trữ chi tiết của máy tính bảng. Đây là một thuộc tính thường được gọi là "đa hình".Với các tài liệu JSON, chúng ta có thể thêm các thuộc tính mới khi chúng ta cần, mà không cần thay đổi một lược đồ cơ sở dữ liệu tập trung. Tồi tệ nhất, điều này làm cho thời gian chết, tốt nhất, hiệu suất đáng kể trên không trong một cơ sở dữ liệu quan hệ. Các tài liệu linh hoạt mang lại cho phép nhà phát triển xử lý dữ liệu bán và không có cấu trúc dễ dàng hơn bằng các ứng dụng di động, web và IoT hiện đại.
- Documents make applications fast: Với dữ liệu cho một thực thể được lưu trữ trong một tài liệu, chứ không phải lan truyền trên nhiều bảng quan hệ, cơ sở dữ liệu chỉ cần đọc và viết vào một nơi duy nhất. Việc có tất cả dữ liệu cho một đối tượng ở cùng một nơi cũng làm cho các nhà phát triển dễ dàng hơn và hiểu được hiệu suất truy vấn.
Đó là vì những lý do mà MySQL, và các cơ sở dữ liệu quan hệ khác, đã thêm hỗ trợ cho JSON. Tuy nhiên, đơn giản chỉ cần thêm một kiểu dữ liệu JSON không mang lại lợi ích về năng suất cho các nhà phát triển của một cơ sở dữ liệu tài liệu cho MySQL. Tại sao? Bởi vì cách tiếp cận của MySQL có thể làm giảm năng suất của nhà phát triển, thay vì cải thiện nó. Xem xét những điều sau đây:
- Proprietary Extensions: Truy vấn và thao tác các nội dung của một tài liệu JSON yêu cầu sử dụng các hàm SQL cụ thể riêng biệt cho MySQL để truy cập các giá trị, điều này sẽ không quen với hầu hết các nhà phát triển.Các MongoDB API được hiểu rộng rãi, và được thông qua bởi các công cụ tiêu chuẩn ngành công nghiệp và kết nối. Một số công ty cơ sở dữ liệu mega-vendor thậm chí đã sử dụng API MongoDB.
- Legacy Relational Overhead: Trình điều khiển MongoDB được thực hiện theo các phương pháp và chức năng vốn có tính idiomatic và tự nhiên đối với các ngôn ngữ lập trình được các nhà phát triển sử dụng.
- Complex Data Handling: Mã hóa nhị phân JSON (BSON) được MongoDB sử dụng và các trình điều khiển của nó hỗ trợ các loại dữ liệu nâng cao không được hỗ trợ bởi JSON dựa trên văn bản thông thường.
- No Data Governance: Schema validation dựa trên tiêu chuẩn JSON Schema IETF, cho phép các nhà phát triển và DBAs xác định và thi hành một cấu trúc lược đồ được quy định cho mỗi bộ sưu tập MongoDB.
- Schema Rigidity: Các nhà phát triển và quản trị viên cơ sở dữ liệu có thể kết hợp tính linh hoạt của một lược đồ động đầy đủ với các kiểm soát quản trị cần thiết cho một số ứng dụng trên tất cả các dữ liệu được lưu trữ trong cơ sở dữ liệu, không chỉ các tập con của nó.
Tham khảo: https://www.mongodb.com/compare/mongodb-mysql
https://hackernoon.com/mongodb-vs-mysql-comparison-which-database-is-better-e714b699c38b