Re: jsonb access operators inefficiency - Mailing list pgsql-hackers

From Andrew Dunstan
Subject Re: jsonb access operators inefficiency
Date
Msg-id 53889EE5.3090805@dunslane.net
Whole thread Raw
In response to jsonb access operators inefficiency  (Teodor Sigaev <teodor@sigaev.ru>)
Responses Re: jsonb access operators inefficiency  (Andrew Dunstan <andrew@dunslane.net>)
Re: jsonb access operators inefficiency  (Teodor Sigaev <teodor@sigaev.ru>)
Re: jsonb access operators inefficiency  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
On 05/30/2014 09:35 AM, Teodor Sigaev wrote:
> Hi!
>
> jsonb operators ->text, ->>text,->int, ->>int use inefficient methods 
> to access to needed field, proportional O(N/2). Attached patch 
> suggests for text operators O(log(N)) and for integer - O(1). The 
> fuctions with fast access already are existed in current code and are 
> used in contains operation, for example. Attached patch uses that 
> functions instead of sequentual loop over object/array.

Teodor, thanks for this.

My only worry is this sort of code, which in a quick search I didn't 
find used elsewhere
   -                   (void) JsonbToCString(jtext, &tjb->root , -1);   -                   result =
cstring_to_text_with_len(jtext->data,  jtext->len);   +                   appendStringInfoSpaces(jtext, VARHDRSZ);   +
                (void) JsonbToCString(jtext, v->val.binary.data,   -1);   +   +                   result =
(text*)jtext->data;  +                   SET_VARSIZE(result, jtext->len);
 


If we're going to construct varlena objects inside a StringInfo, maybe 
we need a proper API for it. Isn't there a danger that data member of 
the StringInfo won't be properly aligned to allow us to do this? In any 
case, we should get most of the benefit of your patch without this 
"optimization".

cheers

andrew




pgsql-hackers by date:

Previous
From: Heikki Linnakangas
Date:
Subject: Re: Proposal for CSN based snapshots
Next
From: Heikki Linnakangas
Date:
Subject: Re: recovery testing for beta