PostgreSQL vs MongoDB: Vergleich von Datenbanken

PostgreSQL vs MongoDB: Vergleich von Datenbanken

  • Orchestrierung
6 Minuten Lesezeit Aktualisiert Jul 16, 2020

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:

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus Orchestrierung

Abonnieren Sie The Brief

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Danke

Sie haben The Brief abonniert
Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.