PostgreSQL vs MongoDB: Comparando bases de datos

PostgreSQL vs MongoDB: Comparando bases de datos

  • Orquestación
6 min de lectura Actualizado Jul 16, 2020

Puntos clave: PostgreSQL están un SGBD tradicional que necesita un esquema, mientras que MongoDB es una base de datos JSON flexible y sin esquema. Ambos ofrecen versiones gratuitas, con MongoDB proporcionando monitorización adicional en la nube.

  • PostgreSQL requiere un esquema predefinido para la entrada de datos.
  • MongoDB soporta la entrada dinámica de datos sin restricciones estrictas de esquema.

En este artículo, comparamos MongoDB y PostgreSQL.

PostgreSQL está una base de datos SQL tradicional de RDBMS (sistema de gestión de bases de datos relacionales), como Oracle y MySQL. PostgreSQL es gratuito.

MongoDB están una base de datos sin esquema, noSQL y JSON. MongoDB tiene una versión gratuita, pero también tienen versiones alojadas y de pago empresarial. Incluso la versión gratuita incluye monitorización en la nube gratuita alojada en su web para tu instalación local.

PostgreSQL

Aquí son los conceptos básicos de PostgreSQL.

Un SGBDR tradicional

Un SGBDR tradicional (sistema de gestión de bases de datos relacionales), como PostgreSQL, tiene un esquema de scripts y requiere una clave primaria. No te puedes añadir datos a él a menos que la columna de datos ya exista.

El shell de PostgreSQL

El shell de PostgreSQL están ligeramente diferente de Oracle o MySQL. te iniciar sesión así:

Añadir datos

MongoDB

    sudo su - postgres
postgres@paris2:~$ psql
psql (9.5.21)
Type "help" for help.

postgres=#

Luego te utiliza la barra (\) para ejecutar comandos que no son comandos SQL.

Crea una tabla

Aquí están cómo te Crea una tabla y un esquema en PostgreSQL:

    create table expenses (
TransactionDate date,
PostDate date,
Description text,
Category text,
Type text,
Amount float8
);

Conectarse a una base de datos

    \c expenses
You are now connected to database "expenses" as user "postgres".

Tablas de lista

    \dt
                  List of relations
 Schema |          Name           | Type  |  Owner   
--------+-------------------------+-------+----------
 public | chase                   | table | postgres

Ejecuta una consulta

La consulta que aparece a continuación hace agregación.

Consulta

    select  category, sum(amount) from chase group by category;
       category        |  sum  
-----------------------+-------
                       | 19389
 Education             |  -216
 Health & Wellness     | -3154
 Personal              | -1582
 Automotive            |   -33
 Shopping              | -4479
 Travel                | -7026
 Fees & Adjustments    |  -316
 Entertainment         |  -274
 Gas                   |  -139
 Home                  | -1409
 Food & Drink          | -1926
 Bills & Utilities     | -3114
 Professional Services |  -114
 Groceries             | -1720
(15 rows)

Añadir datos

    INSERT INTO expenses( 
transactiondate , postdate,  description,   category , type ,amount ) VALUES ('10-July-2020', '10-July-2020', 'coffee shop', 'restaurants', 4.50);

Aquí son los conceptos básicos de MongoDB.

Una base de datos JSON

A diferencia de PostgreSQL y otros RDMBS, una base de datos JSON, como MongoDB, no tiene esquema, así que te puede meter cualquier cosa en ella. Contrasta eso con una base de datos SQL, donde te debe Define su estructura antes de te poner datos.

JSON se ve así:

    data: {
    attribute:  value
}

O una serie de JSON están así:

    data: [{
    attribute1:  value1
},
{
    attribute1:  value2,
   anotherAttribute:  value3
}]

La shell MongoDB

Para abrir el shell de MongoDB, te solo tienes que escribir mongo:

    mongo
MongoDB shell version v3.6.17
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("fd8960a6-d6fd-44f7-a6c5-5257438934e3") }

Crea una base de datos

    use sales
switched to db sales

Crea una colección

Una colección están un conjunto de tablas relacionadas.

    db.createCollection("inventory")
{ "ok" : 1 }

Añadir un registro

    db.inventory.insert({product: "blue shoes", add: 2})
WriteResult({ "nInserted" : 1 })

Consulta

    db.inventory.find({product: "blue shoes"})
{ "_id" : ObjectId("5f0808a6434f5a1831100614"), "product" : "blue shoes", "add" : 2 }

Uso de JavaScript en el shell de MongoDB

Una característica muy potente del shell de MongoDB están que soporta JavaScript. Esto significa que te puede Define funciones y guardar consultas como variables.

Por ejemplo, aquí están cómo te Define Connecticut dibujando un cuadrado alrededor en un mapa. Esta sentencia utiliza las características geográficas de consulta GeoJSON de MongoDB para ello.

    var connecticut = db.address.find ({location:
     {$geoWithin:
       {$geometry: {
       type: "Polygon",
       coordinates:
 [[ [ -73.564453125, 41.178653972331674 ],
   [ -71.69128417968749, 41.178653972331674 ],
   [ -71.69128417968749, 42.114523952464246 ],
   [ -73.564453125, 42.114523952464246 ],
   [ -73.564453125, 41.178653972331674 ]
   ]]
}}}});

Tablas de unión

En los años 70, cuando IBM publicó el artículo que describía el lenguaje SQL y la base de datos que Larry Ellison desarrolló más tarde en Oracle, el espacio en disco y la memoria eran costosos. Así que la práctica adoptada pasó a ser no repetir datos, ya que eso desperdiciaba espacio y memoria costosos. Esa práctica se está llamando normalización de bases de datos.

Hoy en día, por supuesto, el almacenamiento y la memoria son baratos. Los diseñadores de bases de datos noSQL no hacen normalización. Eso simplifica un poco las cosas, ya que no requieren claves externas ni todos los demás elementos de diseño que Crean relaciones entre tablas. Pero también genera su propio conjunto de problemas. (Por ejemplo, las bases de datos SQL son aún más adecuadas que las bases de datos noSQL para sistemas transaccionales como la contabilidad porque es más fácil mantener lo que están llamada integridad referencial—pero eso es otro tema.)

Cuando los datos están guardan en dos tablas y te quieres reunirlos temporalmente en una estructura de solo lectura, como para Crea un informe te ejecutar lo que están llama unión. Esto crea la intersección de dos conjuntos.

Funciona así:

    select sales.productName, product.productName from sales, product where product = upcCode;

La desventaja están que esto requiere mucha potencia de cálculo, memoria y almacenamiento para funcionar en una base de datos distribuida de gran tamaño.

MongoDB tiene índices pero no se conectan

MongoDB no fomenta ni permite realmente las uniones. En su lugar, te colocaría documentos relacionados (registros) entre sí para tenerlos todos en un solo lugar. Esto están un poco incómodo para algo como un sistema de ventas, ya que te tendría algo así:

    { product : "shoes", 
    sales: [{saleNumber:  1, date: 44004, amount: 20, quantity 2},
               {saleNumber:  2, date: 44005, amount: 200, quantity 20}]
}

Eso es incómodo de mantener en un sistema transaccional, pero funcionaría bien para otros tipos de sistemas.

Sin embargo, aunque MongoDB no soporta joins, sí permite índices, lo cual es una característica necesaria de los joins. Esto acelera las consultas.

Recursos adicionales

Así que están una comparación lado a lado de las dos bases de datos. Para conoce más sobre este tema, consulta el blog de Big Data y Aprendizaje Automático de BMC y estos recursos:

Guía de MongoDB

  1. Resumen de MongoDB: Empezando con MongoDB
  2. Cómo instalar MongoDB en Ubuntu y Mac
  3. Creación de una base de datos en MongoDB
  4. Comandos básicos de MongoDB Shell
  5. MongoDB Compass: Uso de la interfaz gráfica de Mongo
  6. Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
  7. Explicación de los operadores de proyección y proyección de MongoDB
  8. Explicación de las funciones agregadas de MongoDB
  9. Ordenación de MongoDB: método y ejemplos de sort()
  10. Uso de operadores de Push & Pull en MongoDB
  11. Cómo utiliza MongoDB $unwind
  12. 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
  13. Ejemplos de consultas de geolocalización de MongoDB
  14. Introducción a las transacciones de MongoDB
  15. Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
  16. Mejores comandos de MongoDB te necesitas saber
  17. Replicación de MongoDB: Una introducción completa
  18. Cómo configurar un clúster de MongoDB
  19. Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
  20. MongoDB Atlas: Configuración y uso de MongoDB gestionado
  21. Cómo ejecutar MongoDB como contenedor Docker
  22. Uso, gestión y requisitos de memoria de MongoDB
  23. Cómo utilizar Mongodump para copias de seguridad de MongoDB
  24. Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
  25. Cómo utilizar PyMongo
  26. Cómo utilizar Mongoose para MongoDB y NodeJS
  27. Chuletas de MongoDB
  28. MongoDB vs Cassandra: Comparación de bases de datos NoSQL
  29. PostgreSQL vs MongoDB: Comparando bases de datos
  30. MySQL vs MongoDB: Comparando bases de datos
  31. Certificaciones MongoDB: Una introducción

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Orquestación

Suscríbete al Informe

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Gracias te

Tú te has suscrito a The Brief
El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.