Re: jsonb access operators inefficiency
От | Andrew Dunstan |
---|---|
Тема | Re: jsonb access operators inefficiency |
Дата | |
Msg-id | 5388B05F.8050203@dunslane.net обсуждение исходный текст |
Ответ на | Re: jsonb access operators inefficiency (Andrew Dunstan <andrew@dunslane.net>) |
Ответы |
Re: jsonb access operators inefficiency
|
Список | pgsql-hackers |
On 05/30/2014 11:08 AM, Andrew Dunstan wrote: > > 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". I see that palloc.h says: The result of palloc() is always word-aligned so maybe my alignment fear is misplaced. So my remaining question is whether this is OK stylistically. cheers andrew
В списке pgsql-hackers по дате отправления: