DEV Community

Cover image for MongoDB vs MySQL: Which database to use
Hunter Johnson for Educative

Posted on • Originally published at educative.io

MongoDB vs MySQL: Which database to use

MySQL is a relational database that has been around for a while. But with the demand for diversity and scalability, MongoDB has become popular. Both offer high performance and similar functionalities.

In this tutorial, we will cover the basics of MySQL and MongoDB, followed by the differences between the two, and what you should use for various use cases.

We will cover:

MongoDB

What is MongoDB?

Developed in 2007, MongoDB is a popular NoSQL, non-relational database management system (DBMS) that uses documents instead of tables or rows for data storage. This data model makes it possible to manipulate related data in a single database operation.

MongoDB documents use JSON-like documents and files, and they are JavaScript (JS) supported. The document fields can vary making it easy to change the structure over time.

MongoDB is considered schema-less, as it doesn't require a pre-defined database schema. MongoDB uses flexible key-value pairs called documents to store data.

Since MongoDB is schema-free, you don't need to define a fixed structure. It is easy for developers to use and learn, meaning both administrators and developers can use it. It has support from all major programming languages and operating systems, including Mac, Linux, and Windows.

MongoDB offers greater reliability and efficiency, letting you meet your speed and storage demands. Since it's a distributed database, it has high availability, horizontal scaling, and geographic distribution.

MongoDB is a great solution for people who want to scale and evolve quickly. It supports rapid iterative development and allows a large number of team members to collaborate.

Main uses on MongoDB:

MongoDB is used prominently for big data as it's non-relational structure is perfectly suited for it. It is also used for customer analytics, content management systems, real-time data integration, product data management, mobility, and scale.

MongoDB's limitations

  • MongoDB does not support joins, so based on how you want to access data you may have to update your documents regularly.
  • It may have high memory usage because of the key-value pairs that can result in data redundancy.
  • Documents have a limit of 16MB.
  • Since ACID is not followed strictly, complex transactions can get complicated.
  • MongoDB does not support stored procedures, so you can't implement business logic at the database level.

MySQL

What is MySQL?

MySQL is an open-source, relational database management system (RDBMS) that stores data in tables and rows. It uses SQL (structured query language) to transfer and access data. JOIN operations simplify querying and correlation. It follows the client-server architecture and supports multi-threading.

Since the MySQL database is established, it has a huge community, extensive testing, and stability. It is available for all major platforms along with connectors to many languages including C, Java, C++, Python, and PHP.

MySQL common use cases:

MySQL is commonly used for mission-critical and heavy trafficked websites, e-commerce applications, data warehousing, and logging applications.

Limitations of MySQL

The limitations of MySQL are that of any other RDBMS, including:

  • Since data is stored in tables, if you have data that does not fit into any table, you will have to re-design your database structure to accommodate it.
  • The database has to be distributed across multiple servers which can be difficult to manage.
  • MySQL becomes less efficient when it comes to large databases due to scaling issues.
  • MySQL is susceptible to SQL injection attacks.

Differences between MongoDB and MySQL

In this section, we will cover some of the main differences between MongoDB and MySQL.

Data Representation

MongoDB represents data as JSON documents, whereas MySQL represents data in rows and tables.

Data would like this in MySQL:

data

In MongoDB, it will look as follows:

{ 
First Name: 'John',
Last Name: 'Doe', 
Employee_ID: 1234, 
Status: 'Active'
}
Enter fullscreen mode Exit fullscreen mode

Data Embedding

MySQL does not offer any option for nesting or embedding data. You can use JOINs but they may result in larger tables with unnecessary fields. JOINs can also be time-consuming and performance intensive.

MongoDB allows you to embed related data. You also have the option of referencing data from another document if you feel the document may grow too much. An example includes:

{
    id: 13,
    name: ‘John Doe’,
    age: 23,
    address: {
        City: 'New Jersey,
        Street: 'London',
        Zip_code: 9876
    }
}
Enter fullscreen mode Exit fullscreen mode

Query Language

MySQL uses SQL, whereas MongoDB uses MQL, the MongoDB query language. We will compare some common database operations on the Employee table in this section.

Selecting data in MySQL

Select * from employee;
Enter fullscreen mode Exit fullscreen mode

Inserting data in MySQL

INSERT INTO employee (employee_id, department, status)
VALUES (12, 'Sales', 'Active');
Enter fullscreen mode Exit fullscreen mode

Updating data in MySQL

UPDATE employee SET department = 'Finance' WHERE employee_id = 14;
Enter fullscreen mode Exit fullscreen mode

Selecting data in MongoDB*

db.find.employee()
Enter fullscreen mode Exit fullscreen mode

Inserting data in MongoDB

db.employee.insert ({employee_id:'12', department.Sales', status:'Active'})
Enter fullscreen mode Exit fullscreen mode

Updating data in MongoDB

db.employee.update({employee_id::{$eq:14}},{$set{ department:'Finance'}},{multi:true})
Enter fullscreen mode Exit fullscreen mode

Index Optimization

Both database use indexes for optimization. If MySQL does not find a relevant index for a query, it searches the entire table.

MongoDB searches through every document in a collection if there are no indexes.

Database Deployment

MySQL has binaries for most operating systems so it can be deployed natively, MongoDB, on the other hand, is more suited to distributed environments.

Speed and Performance

Since MongoDB is a NoSQL database, it is faster than MySQL.

Data Grouping

MongoDB stores documents that belong to a single class or group in a collection. MySQL stores rows of similar types in a table.

Clustering/Replication

MySQL supports master-slave and master-master replication allowing you to reproduce from several master databases in parallel. MongoDB, on the other hand, supports built-in sharding, replication, and auto-elections.

Sharding allows for horizontal scaling, and auto-elections let you set up secondary databases that take over if your primary database fails.

Security

MySQL uses a privilege-based security model that authenticates users and facilitates them with privileges on specific database operations. On the transport layer, it uses encoded connections between servers and clients.

MongoDB uses role-based authentication with flexible privileges. It uses Transport and Socket Layers for encoding and decoding, ensuring only intended users have access to the database.

Scalability

MySQL is vertically scalable, meaning you can increase the load on a single server by increasing RAM or CPU specifications. MongoDB is horizontally scalable, meaning you can create a MongoDB cluster with multiple servers by adding more servers to your database.

Support and Documentation

MySQL offers lifetime support at three levels:

  • Premier: Suited for 1-5 years old
  • Extended: Suited for 6-8 years old
  • Sustain: Suited for 9+ years old

For each level, it offers 24/7 tech support along with access to patches, bug fixes, maintenance releases, and updates. MySQL's documentation is maintained by the Oracle Corporation.

MongoDB offers enterprise-grade support. This gives you the flexibility to update versions at your own pace. MongoDB's documentation is maintained by MongoDB, Inc.

When to use MongoDB or MySQL

When it comes to choosing between the two, there is no clear winner, as both cater to different fields. Your choice will depend on your project needs and goals. In this section, we will look at when you can use MySQL vs. MongoDB.

MySQL is a good choice if:

  • You just started your business, and your database won't scale much.
  • Your data structure won't change for a long time, or you have a fixed schema.
  • You have a high transaction rate.
  • Data security is your top priority.
  • You need better support. MySQL has been around for a long time so, it's a lot easier to find solutions to common problems

MySQL is a good choice if you are working with a legacy application that requires multi-row transactions and has structured data with a clear schema.

MongoDB is a good choice if:

  • You want high data availability along with automatic and instant data recovery.
  • You are working with an unstable schema and want to lower the cost of schema migration..
  • Your services are cloud-based.
  • You want to speed up development.

MongoDB can be the right choice if you are working with real-time analytics, mobile applications, the internet of things, etc., where you may have structure or unstructured data that has the potential for rapid growth.

What to learn next

In this article, we covered the basics of MySQL and MongoDB along with some key differences between the two. There is a lot to learn next, you can start with: vs. non-relational databases

  • SQL Joins
  • Stored Procedures
  • Indexing
  • NoSQL
  • Key-value stores
  • Node.js drivers

You can check out Educative's An Introductory Guide to SQL to get started on SQL basics. You will cover everything from creating to updating databases, all in a hands-on environment.

Educative's interactive course, The Definitive Guide to MongoDB is a great place to start with the basics of NoSQL and build up towards advanced topics.

Happy learning!

Continue reading about databases on Educative

Start a discussion

Which database do you prefer? Was this article helpful? Let us know in the comments below!

Top comments (1)

Collapse
 
rouilj profile image
John P. Rouillard

This example looks wrong:

db.employee.insert ({employee_id:'12', department.Sales', status:'Active'})
Enter fullscreen mode Exit fullscreen mode

you probably want to fix it.