Re: Why is writing JSONB faster than just JSON? - Mailing list pgsql-general

From Dmitry Dolgov
Subject Re: Why is writing JSONB faster than just JSON?
Date
Msg-id 20210415154311.t3meozbednmsfhxx@localhost
Whole thread Raw
In response to Re: Why is writing JSONB faster than just JSON?  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Why is writing JSONB faster than just JSON?
List pgsql-general
> On Wed, Apr 14, 2021 at 10:26:23AM -0400, Tom Lane wrote:
> Dmitry Dolgov <9erthalion6@gmail.com> writes:
> >> On Tue, Apr 13, 2021 at 11:38:04PM -0700, Mitar wrote:
> >> ... Namely, it looks like writing into a jsonb typed
> >> column is 30% faster than writing into a json typed column. Why is
> >> that? Does not jsonb require parsing of JSON and conversion? That
> >> should be slower than just storing a blob as-is?
>
> > * Parsing is happening in both cases, for json it's done for validation
> >   purposes.
>
> Right.
>
> > * Compression of json data is actually dominates the runtime load for large
> >   json objects, making other factors less visible and reducing difference in
> >   size (jsonb also should be a bit bigger, that's why I would think it would be
> >   slower).
> > * At the same time perf shows that json compression spends a bit more time in
> >   pglz_find_match (mostly around accessing and checking history entries), which
> >   is compression optimization via history table. So probably due to differences
> >   in data layout this optimization works slightly worse for plain json than for
> >   jsonb?
>
> Interesting.  I recall that we made some last-minute changes in the JSONB
> physical representation after finding that the original choices resulted
> in sucky compression behavior.  But I think we were only looking at the
> resultant compressed size, not time-to-compress.
>
> My own guess about this, without having tried to reproduce it, is that
> JSONB might end up physically smaller than JSON, resulting in less work
> to push the toasted datum out to disk.  This'd depend a lot on your
> formatting habits for JSON, of course.  But in any case, it'd be worth
> comparing pg_column_size() results to see what's up with that.

Oh, of course I've missed that the input I was using was indeed
formatted, without formatting both cases perform equally well and I
can't reproduce the issue. Although if I understand correctly the
original code in question doesn't actually do any formatting.



pgsql-general by date:

Previous
From: Mike Rylander
Date:
Subject: Re: Timestamp/hstore query?
Next
From: obi reddy
Date:
Subject: Pg_upgrade problem.