Auf einen Blick: PostgreSQL ist ein traditionelles RDBMS, das ein Schema benötigt, während MongoDB eine flexible, schemafreie JSON-Datenbank ist. Beide bieten kostenlose Versionen an, wobei MongoDB zusätzliche Cloud-Überwachung bietet.
- PostgreSQL benötigt ein vordefiniertes Schema für die Dateneingabe.
- MongoDB unterstützt dynamische Dateneingabe ohne strenge Schema-Einschränkungen.
In diesem Artikel vergleichen wir MongoDB und PostgreSQL.
PostgreSQL ist eine traditionelle RDBMS (relationale Datenbankverwaltungssystem) SQL-Datenbank, ähnlich wie Oracle und MySQL. PostgreSQL ist kostenlos.
MongoDB ist eine No-Schema-, noSQL- und JSON-Datenbank. MongoDB hat eine kostenlose Version, aber es gibt auch gehostete und kostenpflichtige Unternehmensversionen. Sogar die kostenlose Version beinhaltet kostenlose Cloud-Überwachung, die auf ihrer Website für Ihre lokale Installation gehostet wird.
PostgreSQL
Hier sind die Grundlagen von PostgreSQL.
Ein traditionelles RDBMS
Ein traditionelles RDBMS (relationales Datenbankmanagementsystem), wie PostgreSQL, hat ein Skriptschema und benötigt einen Primärschlüssel. Sie können keine Daten hinzufügen, es sei denn, die Datenspalte existiert bereits.
Die PostgreSQL-Shell
Die PostgreSQL-Shell unterscheidet sich leicht von Oracle oder MySQL. Du loggst dich so ein:
Daten hinzufügen
MongoDB
sudo su - postgres
postgres@paris2:~$ psql
psql (9.5.21)
Type "help" for help.
postgres=#
Dann benutzt du den Schrägstrich (\), um Befehle auszuführen, die keine SQL-Befehle sind.
Erstellen Sie eine Tabelle
So erstellen Sie eine Tabelle und ein Schema in PostgreSQL:
create table expenses (
TransactionDate date,
PostDate date,
Description text,
Category text,
Type text,
Amount float8
);
Verbinden Sie sich mit einer Datenbank
\c expenses
You are now connected to database "expenses" as user "postgres".
Listentabellen
\dt
List of relations
Schema | Name | Type | Owner
--------+-------------------------+-------+----------
public | chase | table | postgres
Führe eine Abfrage aus
Die folgende Abfrage macht Aggregation.
Abfrage
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)
Daten hinzufügen
INSERT INTO expenses(
transactiondate , postdate, description, category , type ,amount ) VALUES ('10-July-2020', '10-July-2020', 'coffee shop', 'restaurants', 4.50);
Hier sind die Grundlagen von MongoDB.
Eine JSON-Datenbank
Im Gegensatz zu PostgreSQL und anderen RDMBS hat eine JSON-Datenbank wie MongoDB kein Schema, sodass man alles hineinlegen kann. Im Gegensatz dazu ist eine SQL-Datenbank, bei der man die Struktur definieren muss, bevor man Daten einführt.
JSON sieht so aus:
data: {
attribute: value
}
Oder ein Array von JSON sieht so aus:
data: [{
attribute1: value1
},
{
attribute1: value2,
anotherAttribute: value3
}]
Die MongoDB-Hülle
Um die MongoDB-Hülle zu öffnen, tippt man einfach Mongo ein:
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") }
Eine Datenbank erstellen
use sales
switched to db sales
Erstellen Sie eine Sammlung
Eine Sammlung ist eine Menge verwandter Tabellen.
db.createCollection("inventory")
{ "ok" : 1 }
Fügen Sie einen Datensatz hinzu
db.inventory.insert({product: "blue shoes", add: 2})
WriteResult({ "nInserted" : 1 })
Abfrage
db.inventory.find({product: "blue shoes"})
{ "_id" : ObjectId("5f0808a6434f5a1831100614"), "product" : "blue shoes", "add" : 2 }
Verwendung von JavaScript in der MongoDB-Shell
Eine sehr leistungsstarke Funktion der MongoDB-Shell ist, dass sie JavaScript unterstützt. Das bedeutet, dass Sie Funktionen definieren und Abfragen als Variablen speichern können.
Zum Beispiel definieren Sie Connecticut, indem Sie ein Quadrat darum auf einer Karte zeichnen. Diese Anweisung verwendet dafür die GeoJSON-Geo-Abfragefunktionen von MongoDB.
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 ]
]]
}}}});
Verbindungstabellen
In den 1970er Jahren, als IBM das Paper veröffentlichte, das die SQL-Sprache und die von Larry Ellison später zu Oracle entwickelte Datenbank, waren Festplattenspeicher und Speicher teuer. Daher wurde es üblich, Daten nicht zu wiederholen, da das teuren Speicherplatz und Speicher verschwendete. Diese Praxis wird Datenbanknormalisierung genannt.
Heute sind Speicher und Speicher natürlich günstig. NoSQL-Datenbankdesigner machen keine Normalisierung. Das vereinfacht die Dinge etwas, da sie keine Fremdschlüssel und all die anderen Designelemente benötigen, die Beziehungen zwischen Tabellen schaffen. Aber es schafft auch eigene Probleme. (Zum Beispiel sind SQL-Datenbanken immer noch besser geeignet als noSQL-Datenbanken für transaktionale Systeme wie Buchhaltung, weil es einfacher ist, die sogenannte referenzielle Integrität aufrechtzuerhalten – aber das ist ein ganz anderes Thema.)
Wenn Daten in zwei Tabellen gespeichert werden und Sie sie vorübergehend in einer schreibgeschützten Struktur zusammenführen möchten, zum Beispiel um einen Bericht zu erstellen, führen Sie das sogenannte Join aus. Dadurch entstehen die Schnittmenge zwischen zwei Mengen.
Es funktioniert so:
select sales.productName, product.productName from sales, product where product = upcCode;
Der Nachteil ist, dass dies viel Rechenleistung, Speicher und Speicher erfordert, um auf einer großen verteilten Datenbank zu laufen.
MongoDB hat Indizes, aber keine Joins
MongoDB fördert oder erlaubt keine Joins. Stattdessen würde man verwandte Dokumente (Datensätze) ineinander speichern, sodass sie alle an einem Ort sind. Das ist etwas umständlich für etwas wie ein Vertriebssystem, da man so etwas wie das hier haben würde:
{ product : "shoes",
sales: [{saleNumber: 1, date: 44004, amount: 20, quantity 2},
{saleNumber: 2, date: 44005, amount: 200, quantity 20}]
}
Das ist in einem transaktionalen System umständlich, aber für andere Systemtypen würde es gut funktionieren.
Obwohl MongoDB keine Joins unterstützt, erlaubt es Indexe, was eine notwendige Funktion von Joins ist. Dies beschleunigt Abfragen.
Zusätzliche Ressourcen
Das ist also ein direkter Vergleich der beiden Datenbanken. Um mehr zu diesem Thema zu erfahren, besuchen Sie den BMC Big Data & Machine Learning Blog und diese Ressourcen:
- MongoDB-Leitfaden mit 10+ Artikeln und Tutorials, darunter:
- Verwendung von Tableau mit PostgreSQL
- DBMS: Eine Einführung in Datenbankmanagementsysteme
- Ermöglichung der Bürgerdatenwissenschaftler
MongoDB-Leitfaden
- MongoDB-Überblick: Einstieg mit MongoDB
- Wie man MongoDB auf Ubuntu und Mac installiert
- Erstellung einer Datenbank in MongoDB
- MongoDB Shell Grundbefehle
- MongoDB Compass: Nutzung der Mongo GUI
- MongoDB rollenbasierte Zugriffskontrolle (RBAC) erklärt
- MongoDB-Projektion und Projektionsoperatoren erklärt
- MongoDB-Aggregatfunktionen erklärt
- MongoDB-Sortierung: sort()-Methode & Beispiele
- Verwendung von Push-and-Pull-Operatoren in MongoDB
- Wie man MongoDB $unwind
- 23 Gängige MongoDB-Abfrageoperatoren und deren Verwendung
- MongoDB GeoLocation-Abfragebeispiele
- Einführung in MongoDB-Transaktionen
- MongoDB-Indizes: Top-Indextypen und deren Verwaltung
- Die wichtigsten MongoDB-Befehle, die du kennen solltest
- MongoDB-Replikation: Eine vollständige Einführung
- Wie man einen MongoDB-Cluster einrichtet
- MongoDB Sharding: Konzepte, Beispiele & Tutorials
- MongoDB Atlas: Einrichtung und Nutzung von verwaltetem MongoDB
- Wie man MongoDB als Docker-Container ausführt
- MongoDB-Speichernutzung, Verwaltung und Anforderungen
- Wie man Mongodump für MongoDB-Backups verwendet
- Mongorestore-Beispiele zur Wiederherstellung von MongoDB-Backups
- Wie man PyMongo benutzt
- Wie man Mongoose für MongoDB und NodeJS verwendet
- MongoDB Spickzettel
- MongoDB vs Cassandra: NoSQL-Datenbanken im Vergleich
- PostgreSQL vs MongoDB: Vergleich von Datenbanken
- MySQL vs. MongoDB: Vergleich von Datenbanken
- MongoDB-Zertifizierungen: Eine Einführung
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.