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, con 10+ artículos y tutoriales, incluyendo:
- Usando Tableau con PostgreSQL
- DBMS: Introducción a los sistemas de gestión de bases de datos
- Habilitando a los científicos de datos ciudadanos
Guía de MongoDB
- Resumen de MongoDB: Empezando con MongoDB
- Cómo instalar MongoDB en Ubuntu y Mac
- Creación de una base de datos en MongoDB
- Comandos básicos de MongoDB Shell
- MongoDB Compass: Uso de la interfaz gráfica de Mongo
- Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
- Explicación de los operadores de proyección y proyección de MongoDB
- Explicación de las funciones agregadas de MongoDB
- Ordenación de MongoDB: método y ejemplos de sort()
- Uso de operadores de Push & Pull en MongoDB
- Cómo utiliza MongoDB $unwind
- 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
- Ejemplos de consultas de geolocalización de MongoDB
- Introducción a las transacciones de MongoDB
- Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
- Mejores comandos de MongoDB te necesitas saber
- Replicación de MongoDB: Una introducción completa
- Cómo configurar un clúster de MongoDB
- Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
- MongoDB Atlas: Configuración y uso de MongoDB gestionado
- Cómo ejecutar MongoDB como contenedor Docker
- Uso, gestión y requisitos de memoria de MongoDB
- Cómo utilizar Mongodump para copias de seguridad de MongoDB
- Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
- Cómo utilizar PyMongo
- Cómo utilizar Mongoose para MongoDB y NodeJS
- Chuletas de MongoDB
- MongoDB vs Cassandra: Comparación de bases de datos NoSQL
- PostgreSQL vs MongoDB: Comparando bases de datos
- MySQL vs MongoDB: Comparando bases de datos
- Certificaciones MongoDB: Una introducción
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.