NoSQL con PostgreSQL 9.4 e JSONB

From: Giuseppe Broccolo <giuseppe(dot)broccolo(at)2ndquadrant(dot)it>
To: pgsql-it-generale(at)postgresql(dot)org
Subject: NoSQL con PostgreSQL 9.4 e JSONB
Date: 2015-02-05 17:37:03
Message-ID: CAFzmHiXWnFnBduZr0K6AO8QCz01DAPkCgbGqC25hiLnh_xeTWg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-it-generale

Potete consultare l'articolo originale su
http://blog.2ndquadrant.it/nosql-con-postgresql-9-4-e-jsonb/

Con l’introduzione del tipo di dato JSONB in PostgreSQL emerge
definitivamente il lato “NoSQL” di questo DBMS relazionale, andando
incontro a tutti coloro che prediligono una struttura dei dati in forma
“chiave-valore” stile dizionario, molto usata in ambito sviluppo,
garantendo allo stesso tempo tutti i vantaggi di un database relazionale.

Già PostgreSQL 9.2 prevedeva l’uso del tipo JSON, permettendo
direttamente la persistenza su database di un dato JSON. Tuttavia, si
trattava di fatto di un dato di tipo testo, con in più la capacità di
validare la sintassi JSON. Col nuovo tipo di dato JSONB le informazioni
sono memorizzate in un formato binario dedicato, potendo così
beneficiare di algoritmi specifici che ne migliorano le prestazioni di
accesso e ottimizzano la memorizzazione su disco:

* operatori avanzati di accesso e confronto/: grazie alla sua
struttura specializzata JSONB ha permesso l’implementazione di nuovi
operatori, che, oltre a dare una maggiore flessibilità all’utente,
permettono di usare tutta la potenza di indici hash, btree,
GIST e GIN;
* dimensioni su disco ridotte: lo spazio di memorizzazione richiesto
per memorizzare documenti con una struttura complessa con il dato
JSONB è inferiore rispetto a quanto richiesto per il formato JSON;
* organizzazione interna come un dizionario con chiave univoca:
questo significa che l’accesso è molto veloce, ma l’ordine di
inserimento delle chiavi nella struttura JSONB *non* viene
preservato. Inoltre, in presenza di chiavi duplicate, viene
mantenuto solo l’ultimo valore inserito, a differenza di quanto
accadeva nel dato JSON:

$ *SELECT* '{"a":1, "b":2}'::JSONB = '{"b":2, "a":1}'::JSONB
?*column*?
--------
t
(1 row)

$ *SELECT* '{"a":"abc", "d":"def","z":[1,2,3],"d":"overwritten"}'::JSON
JSON
----------------------------------------------
{"a":"abc", "d":"def","z":[1,2,3],"d":"overwritten"}
(1 row)

$ *SELECT* '{"a":"abc", "d":"def","z":[1,2,3],"d":"overwritten"}'::JSONB
JSON
----------------------------------------------
{"a":"abc", "d":"overwritten","z":[1,2,3]}
(1 row)

È bene comunque precisare che il dato JSONB è compatibile con tutte le
funzioni introdotte per il dato JSON.

L’effetto della possibilità di indicizzare il tipo JSONB si traduce in
una migliore disponibilità dei dati in lettura, permettendo di accedere
in modo efficiente all’intero contenuto di un campo JSONB.

Questo rende possibile usare efficientemente PostgreSQL per analizzare
dati privi di uno schema predefinito, avvicinandolo ulteriormente al
mondo “NoSQL”. A tale proposito Thom Brown ha condotto alcuni test
(https://plus.google.com/ThomBrownUK/posts/1JizRBGPYBq) mostrando
come si rilevi un aumento di prestazioni in lettura (ed un più ridotto
spazio occupato dagli indici) rispetto a un campo JSON, arrivando a
prestazioni in lettura superiori anche a DBMS tipicamente NoSQL quali
MongoDB.

Conclusioni

Sicuramente l’introduzione del tipo JSONB avvicina PostgreSQL a quegli
sviluppatori che abitualmente usano dati in formato JSON. Primi fra
tutti, gli sviluppatori web che fanno ampio uso di JavaScript e che
magari hanno già iniziato a lavorare con PostgreSQL usando il tipo JSON
per memorizzare i dati. Passando a JSONB avranno la possibilità di usare
tutta la potenza del motore di PostgreSQL per elaborare quei dati con
facilità ed efficienza.

--
Giuseppe Broccolo - 2ndQuadrant Italy
PostgreSQL Training, Services and Support
giuseppe(dot)broccolo(at)2ndQuadrant(dot)it | www.2ndQuadrant.it

Browse pgsql-it-generale by date

  From Date Subject
Next Message Marco Nenciarini 2015-02-10 10:54:40 Prestazioni del tipo JSONB in PostgreSQL 9.4
Previous Message Gabriele Bartolini 2014-12-18 16:21:21 Esce PostgreSQL 9.4