NoSQL für Unternehmen

EDB Relational QT

Was ist Postgres NoSQL für Unternehmen?

Postgres NoSQL ist die leistungsfähige Kombination aus unstrukturierten und relationalen Datenbanktechnologien in einem einzelnen Datenbank-Verwaltungssystem für Unternehmen. Postgres NoSQL vereint die Freiheit, Flexibilität und Leistung von unstrukturierten und halbstrukturierten Daten mit der langfristigen Verwendbarkeit der Daten als Unternehmensinformationen.

Postgres-Funktionen für Dokument- und Key-Value-Speicher bieten die Vorteile neuer NoSQL-Technologien, die ohne Datensilos, operative Komplexität, Verlust der Datenintegrität und Risiken in herkömmliche Dateninfrastrukturen von Unternehmen integriert werden können.

 

Die vollständige Dokumentendatenbank

Postgres vereint die führende JSON-Implementierung mit seiner bewährten ACID-Transaktionintegrität. Diese einzigartige Kombination bietet Benutzern branchenführende Flexibilität der Arbeitsauslastung über eine kostengünstige und bewährte Plattform.

Eine vollständige Datenbanklösung muss heutzutage nicht nur die transaktionale Integrität gewährleisten, sondern auch ein höheres Datenvolumen, eine höhere Daten- und Durchsatzgeschwindigkeit sowie eine steigende Vielfalt an Datenformaten bewältigen. Neu entwickelte Technologien spezialisieren sich auf die Optimierung einer oder zwei dieser Aspekte – und das auf Kosten der anderen.

Postgres mit JSON geht ganzheitlich auf die Anforderungen der Benutzer ein und bewältigt den Großteil der NoSQL-Arbeitsauslastungen. Weitere Informationen finden Sie im Whitepaper PostgreSQL Advances to Meet NoSQL Challenges (PostgreSQL wurde erweitert und erfüllt NoSQL-Herausforderungen).

 

ACID oder BASE?

Die seit Jahrzehnten für Datenbanktechnologien geltenden Standards Atomarität, Konsistenz, Isolation und Dauerhaftigkeit (Atomicity, Consistency, Isolation & Durability, ACID) bedeuten, dass die wertvollste Ressource des Unternehmens – die Daten – gültig, konsistent und geschützt ist. Eigenständige NoSQL-Technologien erfüllen die ACID-Standards nicht, da sie zugunsten einer hohen Durchsatzleistung für unstrukturierte Anwendungen den Datenschutz opfern. Die von ihnen erreichten Standards wie grundlegende Verfügbarkeit, Soft-Zustand und mögliche Konsistenz (Basic Availability, Soft State & Eventual Consistency, BASE) sind für Anwendungsfälle mit geringem Risiko geeignet, wie z. B. eine verlorene Textnachricht oder das Verschieben eines Tokens in einem Multiplayer-Spiel.

NoSQL-Lösungen können Atomarität innerhalb eines einzelnen Dokuments gewährleisten. Bei den meisten Systemen mit unternehmenswichtigen Beziehungen zwischen mehreren Sätzen gruppierter Daten ist dies jedoch unzureichend – egal, ob strukturiert oder unstrukturiert. Mit den NoSQL-Funktionen von Postgres können wichtige Teile Ihrer unstrukturierten Daten mit Ihren herkömmlich strukturierten Daten integriert werden ohne die Leistungs- und Agilitätsvorteile der NoSQL-Tools aufzugeben.

 

Einfachheit

Apps für das soziale oder mobile Web zu schreiben ist mit der Unterstützung von Postgres für JavaScript, Python, Ruby, node.js, JSON, Key-Values, Geospatial und XML spielend leicht.

Entwickler können mit ihren bevorzugten Tools mühelos die Benutzerfreundlichkeit verbessern, die Produkteinführungszeit verkürzen und Kosten senken.

 

Skalierbarkeit

Der enorme Zuwachs an Postgres-Benutzern ist teilweise auf die bewährte Unterstützung von Systemen mit hohem Durchsatz zurückzuführen, in denen Tausende von Benutzern große Datenmengen verarbeiten. Selbst in Situationen mit extremen Volumen verarbeitet Postgres mühelos große Datenmengen einer Vielzahl gleichzeitiger Benutzer. 

  • Der xDB-Replikationsserver von EDB bietet eine nicht virtualisierte Leselösung für das horizontale Hochskalieren. xDB ermöglicht durch Multimasterkonfigurationen skalierbares Lesen und Schreibverfügbarkeit für eines der größten amerikanischen Telefonunternehmen.  
  • Mit dem EDB Failover Manager werden fehlertolerante Datenbankcluster erstellt, um beim Ausfall einer Masterdatenbank die Ausfallzeiten zu minimieren. Hierfür werden die Daten online mit fast hundertprozentiger Verfügbarkeit beibehalten. 
  • Der EDB Postgres Enterprise Manager bietet zahlreiche Fähigkeiten an, die die Konfiguration und Verwaltung umgangreicher Postgres-Installationen ermöglichen wie z.B. Leistungsdashboards, Alarmen zu kritischen Bedingungen, Kapazitätsplanung, Protokollanalysen usw.

 

Leistung

Postgres erfüllt bereits seit Jahren die anspruchsvollsten Anforderungen der größten Versicherungsgesellschaften, Banken, Makler, Behörden und Rüstungsunternehmen der Welt. Die Leistung von Postgres wird fortlaufend und mit jeder jährlich veröffentlichten Version verbessert. Hierzu zählt auch die Leistung im Zusammenhang mit unstrukturierten Datentypen.

 

EDB ermutigt Sie, die NoSQL-Leistung von Postgres selbst zu erleben. Laden Sie bei GitHub pg_nosql_benchmark herunter, und sagen Sie uns Ihre Meinung dazu.

Vergleich einer Dokument- mit einer relationalen Datenbank

Ein intelligenter Ansatz für neue Technologien erfordert eine genaue Auswertung der Anforderungen und der für deren Erfüllung vorhandenen Tools. In der folgenden Tabelle werden die Merkmale einer dokumentorientierten NoSQL-Datenbank (wie z. B. MongoDB) mit denen der relationalen/Dokumentdatenbank von Postgres verglichen, damit Sie sich anhand dieser Fakten für die richtige Lösung für Ihre Anforderungen entscheiden können.

Features MongoDB PostgreSQL
Beginn der Open Source-Entwicklung 2009 1995
Schemata Dynamisch Statisch und dynamisch
Unterstützt hierarchische Dokumentdaten Ja Ja (seit 2012)
Unterstützt Schlüsselwertdaten Ja Ja (seit 2006)
Unterstützt relationale Daten/Speicherung in normierter Form Nein Ja
Dateneinschränkungen Nein Ja
Maximale Dokumentgröße 16 MB 1.000 MB
Zusammenführen von Daten Extrem schwierig Extrem einfach
Leistungsstarke standardisierte Abfragesprache Nein Ja
Transaktionsunterstützung und Steuerelemente mehrerer gleichzeitiger Versionen Nein Ja
Atomarische Transaktionen In einem Dokument In der gesamten Datenbank
Unterstützte Sprachen für die Webentwicklung JavaScript, Python, Ruby und mehr … JavaScript, Python, Ruby und mehr …
Unterstützung üblicher Web-Datenformate JSON (Dokument), Key-Value, XML JSON (Dokument), Key-Value, XML
Unterstützung für Geospatial Ja Ja
Direkter Weg zur Skalierung Horizontal erweitern Vertikal skalieren
Sharding Einfach Komplex
Serverseitige Programmierung Ohne Prozedurale Sprachen, wie z. B. Python, JavaScript, C, C++, Tcl, Perl und viele weitere
Einfache Integration in andere Datenspeicher Nein, erzeugt Datensilos Ja, Foreign Data Wrappers für Oracle, MySQL, MongoDB, CouchDB, Redis, Neo4j, Twitter, LDAP, File, Hadoop und weitere …
Geschäftslogik Eingebettet in und verteilt über Clientanwendungen Zentralisiert über Trigger und gespeicherte Prozeduren bzw. verteilt über Clientanwendungen
Verfügbarkeit qualifizierter Ressourcen Schwer zu finden Leicht zu finden
Anwendungsschwerpunkte Big Data (Milliarden von Datensätzen) mit Updates von hoher Parallelität, bei denen keine Integrität und Konsistenz der Daten erforderlich ist. Transaktionale und operative Anwendungen, die von einer normalisierten Form, Joins, Constraints von Daten und transaktionalem Support profitieren.

 

Weitere Informationen zu den JSON-Funktionen in Postgres:

Postgres unterstützt strukturierte und unstrukturierte Daten

NoSQL-Technologien, wie z. B. Dokumentspeicher und Key-Value-Speicher, unterstützen schrittweise Entwicklungsmethoden. Datenmodelle entstehen dabei während der Zyklen agiler Entwicklung, die die Anwendung durchläuft. Sie werden nicht mit ER-Diagrammen, Analyse der Normalform und konzeptionellen bzw. logischen oder physischen Design-Frameworks vorbereitet.

NoSQL und ACID

Postgres hat JSON (2012) und HSTORE (2006) eingeführt und bietet Lösungsarchitekten und Entwicklern damit eine Option zur schemalosen Datenverwaltung, die vollständig in das stabile ACID (Atomic, Consistent, Isolation and Durable)-Modell von Postgres integriert ist.

 

Unterstützung für JSON-Datentypen

Postgres bietet zuverlässige Unterstützung für das Einfügen von JSON-Daten, inklusive validierendem Parser, Speicher und umfassenden Funktionen zum Extrahieren von Elementen aus JSON-Dokumenten.

 

JSON In und JSON Out

Mit Postgres lassen sich außerdem Abfrageergebnissätze problemlos in JSON codieren. So können Anwendungsentwickler, die bevorzugt mit JSON arbeiten, ihre Daten rasch im jeweiligen Originalformat von Postgres abrufen.

 

Dokument- und Key-Value-Daten

Mit HSTORE bietet Postgres außerdem seit 2006 Key-Value-Unterstützung. Anders als bei reinen NoSQL-Lösungen ist ein in Postgres erstellter Key-Value-Speicher ACID-konform. Wie JSON kann bei Bedarf auch HSTORE zum Emulieren einer schemalosen Datenbank verwendet werden. Außerdem können von Postgres verwaltete Key-Value-Daten in JSON-formatierte Daten umgewandelt werden. Dies steigert die Flexibilität und erweitert die Auswahl an NoSQL-ähnlichen Anwendungen, mit denen Postgres eingesetzt werden kann.

 

JSON und Javascript

Postgres stellt Javascript-Funktionen direkt in der Datenbank zur Verfügung. So können Webentwickler mit dem gleichen JavaScript-Modul, das ihre Webclients zugrunde liegt, zentralisierte Datenbanklogik schreiben. V8 wurde von Google für Chrome entwickelt und ist für Clients und Server ausgelegt. Außerdem ist es ein Hauptbestandteil von Node.js. V8 ist als Postgres-Add-On PL/V8 verfügbar. Mit Postgres können Ihre Entwickler auch in der Datenbank mit dem Format Ihrer Webdaten und der Sprache Ihrer Webanwendungen arbeiten.

 

Postgres – wenn es auf Präzision ankommt

Postgres 9.4 führt JSONB ein, einen weiteren JSON-Typ mit binärem Speicherformat, der sich erheblich von BSON unterscheidet. BSON wird von einem großen Anbieter reiner Dokumentdatenbanken verwendet. BSON steht zwar für „Binary JSON“, kann jedoch nicht alle JSON-Werte darstellen. BSON kann beispielsweise keine Ganz- oder Gleitkommazahl mit einer Genauigkeit über 64 Bit darstellen. JSONB hingegen kann jeden beliebigen JSON-Wert darstellen.

Weitere Informationen zu den JSON-Funktionen in Postgres:

JSON-/JSONB-Operatoren und -Funktionen in Postgres

In den folgenden Tabellen werden die zahlreichen Operatoren und Funktionen angezeigt, die zum Speichern, Abrufen, Konvertieren, Bearbeiten und Erstellen von JSON-Daten in einer relationalen Postgres-Umgebung verfügbar sind. Wenn Sie diese Funktionen mit dem Key-Value-Format von Postgres (HSTORE), der Volltextsuche, Trigrammsuche, der Suche nach Pixelwiederholungen, der GIN- und GiST-Indizierung, mit unprotokollierten Tabellen, dem XML-Support, Foreign Data Wrappers (wie z. B. MondoDB, CouchDB und Redis) sowie asynchronen Commit-Einstellungen für „mögliche Konsistenz“ verwenden, benötigen Sie die Anforderungen Ihrer unstrukturierten Daten keine weitere spezialisierte Datenbank mehr.

Mit JSON-Datentypen in Postgres können JSON-Daten (JavaScript Object Notation) entsprechend dem Standard RFC 7159 gespeichert werden. Der JSON-Datentyp speichert eine genaue Kopie des Eingabetexts, die von Verarbeitungsfunktionen bei jeder Ausführung erneut analysiert werden muss. JSONB-Daten werden in einem aufgelösten Binärformat gespeichert, das aufgrund des zusätzlichen Konvertierungsaufwands zwar etwas langsamer eingegeben, jedoch deutlich schneller verarbeitet wird, da keine erneute Analyse erforderlich ist. JSONB unterstützt außerdem Indizierung, dies kann von großem Vorteil sein.

 

In der folgenden Tabelle werden Operatoren aufgeführt, die zur Verwendung mit beiden JSON-Datentypen (JSON und JSONB) verfügbar sind.

JSON- und JSONB-Operatoren
Operator Rechter Operandentyp Beschreibung
–> int JSON-Array-Element abrufen (ab Null indiziert, negative ganze Zahlen werden vom Ende her gezählt)
–> text JSON-Objektfeld nach Schlüssel abrufen
–>> int JSON- Arrayelement als Text abrufen
–>> text JSON-Objektfeld als Text abrufen
#> text[ ] JSON-Objekt am angegebenen Pfad abrufen
#> text[ ] JSON-Objekt am angegebenen Pfad als Text abrufen

 

Weitere Operatoren sind nur für JSONB vorhanden, das binäre Speicherformat für JSON.

Weitere JSONB-Operatoren
Operator Rechter Operandentyp Beschreibung
@> jsonb Enthält der linke JSON-Wert die richtigen JSON-Pfad/-Wert-Einträge auf der obersten Ebene?
<@ jsonb Sind die Einträge für den linken JSON-Pfad/Wert auf der obersten Ebene im richtigen JSON-Wert enthalten?
? text Ist die Zeichenfolge als Schlüssel auf oberster Ebene innerhalb des JSON-Werts vorhanden?
?| text[ ] Sind irgendwelche dieser Array-Zeichenfolgen als Schlüssel der obersten Ebene vorhanden?
?& text[ ] Sind alle diese Array-Zeichenfolgen als Schlüssel der obersten Ebene vorhanden?
| | jsonb Verketten Sie zwei JSONB-Werte zu einem neuen JSONB-Wert.
- text Löschen Sie das Schlüssel/Wert-Paar oder Zeichenfolge-Element aus dem linken Operanden. Schlüssel/Wert-Paare werden auf Grundlage ihres Schlüsselwerts zugeordnet.
- Ganze Zahl Löschen Sie das Array-Element mit dem angegebenen Index (negative ganze Zahlen werden vom Ende her gezählt). Löst eine Fehlermeldung aus, wenn der Container auf der obersten Ebene kein Array ist.
#- text[] Löschen Sie das Feld oder Element mit dem angegebenen Pfad (für JSON-Arrays, negative ganze Zahlen werden vom Ende her gezählt).

 

In dieser Tabelle werden die Funktionen aufgeführt, die zum Erstellen von JSON-Werten verfügbar sind. Aktuell stehen keine äquivalenten Funktionen für JSONB zur Verfügung. Sie können jedoch das Ergebnis einer dieser Funktionen in JSON umwandeln.

JSON-Erstellungsfunktionen
Funktion Beschreibung
to_json(anyelement)

to_jsonb(anyelement)

Gibt den Wert als JSON oder JSONB zurück. Arrays und Composita werden (rekursiv) in Arrays und Objekte konvertiert. Falls eine Umwandlung des Typs in JSON erfolgt, wird die Konvertierung mithilfe der Umwandlungsfunktion ausgeführt. Andernfalls wird ein Skalarwert erzeugt. Außer bei einer Zahl, einem booleschen oder Nullwert wird für jeden Skalartyp die Textdarstellung so verwendet, dass diese einen gültigen JSON- oder JSONB-Wert darstellt.
array_to_json(anyarray [, pretty_bool]) Gibt das Array als JSON-Array zurück. Ein mehrdimensionales PostgreSQL-Array wird ein JSON-Array aus Arrays. Zeilenvorschübe werden zwischen dimension-1-Elementen hinzugefügt, wenn pretty_bool wahr ist.
row_to_json(record [, pretty_bool]) Gibt die Zeile als JSON-Objekt zurück. Zeilenvorschübe werden zwischen level-1-Elementen hinzugefügt, wenn pretty_bool wahr ist.
json_build_array(VARIADIC "any")

jsonb_build_array(VARIADIC "any")

Erstellt ein JSON-Array mit möglicherweise heterogenen Typen aus einer variadic-Argumentliste.
json_build_object(VARIADIC "any")

jsonb_build_object(VARIADIC "any")

Erstellt ein JSON-Objekt aus einer variadic-Argumentliste. Nach Konvention besteht die Argumentliste aus alternierenden Schlüsseln und Werten.
json_object(text[ ])

jsonb_object(text[ ])

Erstellt ein JSON-Objekt aus einem Textarray. Das Array muss entweder aus genau einer Dimension mit einer geraden Anzahl von Mitgliedern bestehen, in diesem Fall werden sie als alternierende Schlüssel/Wert-Paare behandelt. Oder das Array besteht aus zwei Dimensionen, sodass jedes innere Array über genau zwei Elemente verfügt, die als Schlüssel/Wert-Paar behandelt werden.
json_object(keys text[ ], values text[ ])

jsonb_object(keys text[ ], values text[ ])

Diese Form des json_object bezieht Schlüssel und Werte paarweise aus zwei gesonderten Arrays. Im Übrigen ist es mit der Form für ein Argument identisch.

 

In der letzten Tabelle werden die Funktionen aufgeführt, die für das Verarbeiten von JSON- und JSONB-Werten verfügbar sind.

JSON-Verarbeitungsfunktionen
Funktion Rückgabetyp Beschreibung
json_array_length(json)

jsonb_array_length(jsonb)

int Gibt die Anzahl der Elemente im äußersten JSON-Array zurück.
json_each(json)

jsonb_each(jsonb)

setof key text, value json

setof key text, value jsonb

Erweitert das äußerste JSON-Objekt zu einem Satz aus Schlüssel/Wert-Paaren.
json_each_text(json)

jsonb_each_text(jsonb)

setof key text,

value text

Erweitert das äußerste JSON-Objekt zu einem Satz aus Schlüssel/Wert-Paaren. Die zurückgegebenen Werte sind vom Typ Text.
json_extract_path(from_json json, VARIADIC path_elems text[ ])

jsonb_extract_path(from_jsonb jsonb, VARIADIC path_elems text[ ])

json

jsonb

Gibt den JSON-Wert zurück, auf den path_elems zeigt (gleichwertig mit #>-Operator).
json_extract_path_text(from_json json, VARIADIC path_elems text[ ])

jsonb_extract_path_text(from_json jsonb, VARIADIC path_elems text[ ])

test Gibt den JSON-Wert als Text zurück, auf den path_elems zeigt (gleichwertig mit #>-Operator).
json_object_keys(json)

jsonb_object_keys(jsonb)

setof text Gibt den Schlüsselsatz im äußersten JSON-Objekt zurück.
json_populate_record(base anyelement, from_json json)

jsonb_populate_record(base anyelement, from_json jsonb)

anyelement Erweitert das Objekt aus from_json zu einer Zeile, deren Spalten mit dem Datensatztyp übereinstimmen, der von der Basis definiert wurde (siehe folgenden Hinweis).
json_populate_recordset(base anyelement, from_json json)

jsonb_populate_recordset(base anyelement, from_json jsonb)

setof anyelement Erweitert das äußerste Objektarray aus from_json zu einem Zeilensatz, dessen Spalten mit dem Datensatztyp übereinstimmen, der von der Basis definiert wurde (siehe folgenden Hinweis).
json_array_elements(json)

jsonb_array_elements(jsonb)

setof json

setof jsonb

Erweitert ein JSON-Array zu einem Satz aus JSON-Werten.
json_array_elements_text(json)

jsonb_array_elements_text(jsonb)

setof text Erweitert ein JSON-Array zu einem Satz aus Textwerten.
json_typeof(json)

jsonb_typeof(jsonb)

text Gibt den Typ des äußersten JSON-Werts als Textzeichenfolge zurück. Mögliche Typen sind Objekt, Array, Zeichenfolge, Zahl, boolescher Wert und Null.
json_to_record(json)

jsonb_to_record(jsonb)

record Erstellt einen beliebigen Datensatz aus einem JSON-Objekt (siehe nachfolgenden Hinweis). Wie bei allen Funktionen für die Rückgabe eines Datensatzes muss der Aufrufer explizit die Struktur des Datensatzes mit einer AS-Klausel definieren.
json_to_recordset(json)

jsonb_to_recordset(jsonb)

setof record Erstellt einen beliebigen Satz von Datensätzen aus einem JSON-Array aus Objekten (siehe nachfolgenden Hinweis). Wie bei allen Funktionen für die Rückgabe eines Datensatzes muss der Aufrufer explizit die Struktur des Datensatzes mit einer AS-Klausel definieren.
json_strip_nulls(from_json json)

jsonb_strip_nulls(from_json jsonb)

json

jsonb

Gibt from_json bei allen Objektfeldern zurück, bei denen Nullwerte ausgelassen wurden. Andere Nullwerte werden nicht verarbeitet.
jsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean]) jsonb Gibt das Ziel mit dem durch den Pfad ausgewiesenen Abschnitt zurück, wobei new_value ersetzt wird bzw. new_value hinzugefügt wird, wenn create_missing wahr (standardmäßig wahr) und das durch den Pfad ausgewiesene Element nicht vorhanden ist. Wie bei den pfadorientierten Operatoren werden negative ganze Zahlen im Pfad vom Ende der JSON-Arrays her gezählt.
jsonb_pretty(from_json jsonb) text Gibt from_json als eingerückten JSON-Text zurück.

 

Klicken Sie hier, um eine vollständige Referenz der JSON-Funktionen und -Operatoren mit Beispielen und Beispielergebnissen anzuzeigen.

 

Weitere Informationen zu den JSON-Funktionen in Postgres:

Ihr Feedback ist wichtig!

Wir möchten diese Website optimieren und benötigen dazu Ihre Hilfe. Sagen Sie uns einfach, wie gut diese Website Ihre Anforderungen erfüllt.

Umfrage starten >>

PG XDK-Lernprogramm

Mit dem PostgreSQL XDK können Sie sich mit den NoSQL-Funktionen von PostgreSQL vertraut machen. 

In diesem Lernprogramm auf Amazon Web Services erfahren Sie, wie Sie mit PostgreSQL 9.4 Ihre JSON-Daten bearbeiten.

PG XDK – Erste Schritte

PosgreSQL herunterladen

 

NoSQL Webcast

Greater Developer Flexibility with NoSQL in EDB Postgres

NoSQL will give developers control over the data to be stored within the database without having to rely on a DBA to implement changes. This presentation will give an overview of what NoSQL is, briefly what the pros and cons are, and includes a demo of the NoSQL functionality in EDB Postgres to allow you to better choose the best data management solution for your use case.
 

NoSQL-Benchmark

Vergleichen Sie die Leistung von Postgres bei unstrukturierten Daten mit der von MongoDB.

Laden Sie die NoSQL-Benchmark für Postgres herunter, und testen Sie selbst.

PosgreSQL herunterladen