Erklärung von JSONB, eingeführt von PostgreSQL
PostgreSQL nur eingeführt JSONB und es ist bereits trending auf hacker news. Es wäre toll, wenn jemand erklären könnte, wie es anders aus Hstore und JSON-früher vorhanden, in PostgreSQL. Was sind die vor-und Nachteile und Wann sollte jemand in Betracht ziehen es?
InformationsquelleAutor der Frage Peeyush | 2014-03-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste,
hstore
ist ein contrib-Modul, die Ihnen nur erlaubt, zu speichern, key => Wert-Paare, wobei die Schlüssel und Werte können nurtext
s (allerdings können Sie Werte für sql -NULL
s auch).Beide
json
&jsonb
speichern Sie eine gültige JSON - Wert (definiert in seinem Spezifikation).F. ex. dies sind die gültigen JSON-Darstellungen:
null
true
[1,false,"string",{"foo":"bar"}]
{"foo":"bar","baz":[null]}
-hstore
ist nur eine kleine Teilmenge im Vergleich zu dem, was JSON ist in der Lage (aber wenn Sie nur diese Teilmenge, es ist in Ordnung).Der einzige Unterschied zwischen
json
&jsonb
ist Ihre Lagerung:json
gespeichert ist, in seine nur-text-format, währendjsonb
gespeichert ist, in einigen binäre DarstellungGibt es 3 wichtige Konsequenzen:
jsonb
dauert in der Regel mehr Speicherplatz alsjson
(manchmal auch nicht)jsonb
benötigt mehr Zeit zum bauen aus der Eingabe Darstellung alsjson
json
Operationen nehmen deutlich mehr Zeit alsjsonb
(& Analyse muss auch getan werden, jedes mal, wenn Sie eine operation in einemjson
typisierten Wert)Wenn
jsonb
verfügbar sein wird mit einer stabilen Version, gibt es zwei wichtige Anwendungsfälle, wenn Sie können leicht zwischen Ihnen wählen:json
.jsonb
.InformationsquelleAutor der Antwort pozs
Peeyush:
Die kurze Antwort ist:
Für eine längere Antwort, Sie müssen warten, für mich zu tun, ein komplettes "HowTo" Dokument verfasst, die näher an der release 9.4.
InformationsquelleAutor der Antwort FuzzyChef
hstore
ist eher eine "Breite Spalte" storage-type, es ist eine flache (nicht verschachtelte) Wörterbuch von Schlüssel-Wert-Paaren, immer gespeichert in einem halbwegs effizienten binären format (eine hash-Tabelle, daher der name).json
speichert JSON-Dokumente als text, Validierung durchführen, wenn die Dokumente gespeichert sind, und analysieren Sie Sie auf Ausgabe, wenn nötig (also den Zugriff auf einzelne Felder); es sollte Unterstützung für die gesamte JSON spec. Da die gesamte JSON-text gespeichert ist, wird die Formatierung beibehalten.jsonb
nimmt Abkürzungen aus Gründen der Leistung: JSON-Daten analysiert, die auf Eingangs-und im binären format gespeichert werden, Taste Ordnungen in Wörterbüchern nicht aufrechterhalten, und es sind weder doppelte Schlüssel. Zugriff auf einzelne Elemente in der JSONB Feld ist schnell, da es nicht erfordern, das Parsen von JSON-text die ganze Zeit. Auf output -, JSON-Daten rekonstruiert und die ursprüngliche Formatierung verloren.IMO, gibt es keinen nennenswerten Grund für nicht Verwendung
jsonb
sobald es verfügbar ist, wenn Sie die Arbeit mit maschinenlesbaren Daten.InformationsquelleAutor der Antwort Ivan Voras
Eine einfache Erklärung für den Unterschied zwischen json und jsonb (original Bild von PostgresProfessional):
Mehr in Rede video und die dia-Präsentation von jsonb-Entwickler. Auch Sie führten JsQuerypg.extension bietet leistungsstarke jsonb query language
InformationsquelleAutor der Antwort ChelowekKot
War ich auf der pgopen heute benchmarks sind schneller Weg als mongodb, ich glaube es war um 500% schneller wählt. So ziemlich alles wurde schneller, mindestens um 200%, wenn kontrastiert mit mongodb, als eine Ausnahme, jetzt ist ein update, das erfordert komplett umschreiben die gesamte json-Spalte etwas mongodb Griffe besser.
Gin Indizierung auf jsonb klingt erstaunlich.
Auch postgres wird weiterhin die Arten von jsonb intern und im Grunde übereinstimmen, mit Typen wie numerische, text, boolean, etc.
Joins wird auch möglich sein mit jsonb
Hinzufügen PLv8 für gespeicherte Prozeduren und dies im Grunde ein Traum für node.js Entwickler.
Wird es gespeichert als binäre jsonb wird auch Streifen werden alle whitespace-Zeichen, ändern Sie die Reihenfolge der Eigenschaften, und entfernen Sie doppelte Eigenschaften, die mit dem letzten auftreten der Eigenschaft.
Neben der index bei der Abfrage jsonb Spalte, die im Gegensatz zu json-Spalte postgres nicht haben, um tatsächlich laufen die Funktionalität um den text zu konvertieren zu json auf jede Zeile, die wird wahrscheinlich sparen eine große Menge an Zeit allein.
InformationsquelleAutor der Antwort John
Soweit ich das beurteilen kann,
hstore, wie es derzeit vorhanden ist (in Postgresql 9.3) nicht erlauben Verschachtelung von anderen Objekten und arrays als Werte der Schlüssel/Wert-Paaren. aber eine Zukunft hstore patch wird es erlauben, die für den Nestbau. dieser patch wird nicht in der 9.4 Version und kann nicht aufgenommen werden in absehbarer Zeit.
json, so wie es heute existiert hat ermöglichen, die für den Nestbau, aber ist text-basiert, und nicht für die Indizierung, also ist es "langsam"
jsonb, die veröffentlicht wird, mit 9.4 wird die aktuelle nesting-Funktionen der json -, sowie der GIN/GIST Indizierung von hstore, so wird es schnell
Menschen, die auf postgresql 9.4 scheinen zu sagen, dass die neue, schnelle jsonb-Typ wird Appell an Menschen, die gewählt haben, verwenden Sie ein noSQL-datenspeicher wie MongoDB, können aber kombinieren Sie jetzt eine relationale Datenbank mit einer Abfrage in der Lage, unstrukturierte Daten unter einem Dach
http://www.databasesoup.com/2014/02/why-hstore2jsonb-is-most-important.html
Benchmarks von postgresql 9.4 jsonb scheinen, um auf Augenhöhe mit oder, in einigen Fällen schneller als MongoDB
http://texture.io/alphabetum/postgresql-incl-hstore-vs-mongodb
InformationsquelleAutor der Antwort erik swedberg
jsonb ist die "bessere" version von JSON. Können überprüfen Sie mit Hilfe eines Beispiels.
Im Allgemeinen, sollte man lieber JSONB , es sei denn, es sind ganz spezielle Anforderungen, wie zum Beispiel herkömmliche Annahmen über die Reihenfolge der Objekt-Schlüssel.
InformationsquelleAutor der Antwort subodhkarwa
Ein weiterer wichtiger Unterschied ist, dass es gar nicht erwähnt, in jeder Antwort oben, ist, dass es keine Gleichheit-operator für
json
geben, aber es ist eine fürjsonb
.Bedeutet dies, dass Sie nicht verwenden können
DISTINCT
Schlüsselwort bei der Auswahl dieserjson
-Typ und/oder andere Felder aus einer Tabelle (Sie könnenDISTINCT ON
statt, aber es ist nicht immer möglich, da Fälle wie diese).InformationsquelleAutor der Antwort vlasiak