Обсуждение: GD global data array capabilities in pltcl
What would be the limitations of using the GD (global data) array in pltcl stored procedures ? I mean, if I'll keep there a big cache for a warehouse using set GD($itemId,quantity) $computedQuantity ... then elsewhere return $GS($itemId,quantity) would be a problem for let's say , 15000 articles? How would work the GD array in a heavy multi-user application? I presume that it is shared among any backend processes, isn't it? Are there some locking mechanisms? In other words, is the GD array appropriate to implement some caching features for a heavy used application in PostgreSQL? If not, are there any other sollutions (before going to EJB's and stuff) ? Thanks in advance, Constantin Teodorescu Braila, ROMANIA
On Mon, 14 Oct 2002, Constantin Teodorescu wrote:
> What would be the limitations of using the GD (global data) array in
> pltcl stored procedures ?
>
> I mean, if I'll keep there a big cache for a warehouse using
>
> set GD($itemId,quantity) $computedQuantity
> ...
> then elsewhere
>
> return $GS($itemId,quantity)
>
> would be a problem for let's say , 15000 articles?
>
> How would work the GD array in a heavy multi-user application?
> I presume that it is shared among any backend processes, isn't it?
>
Comment in the code says:
/************************************************************ * prefix procedure body with * upvar #0
<internal_procname>GD
so I would say it's not accessable from other functions within the same
backend. I doubt very much that this data is database wide I can only see it
being backend specific.
> Are there some locking mechanisms?
>
> In other words, is the GD array appropriate to implement some caching
> features for a heavy used application in PostgreSQL?
>
> If not, are there any other sollutions (before going to EJB's and stuff) ?
>
> Thanks in advance,
> Constantin Teodorescu
> Braila, ROMANIA
>
--
Nigel J. Andrews
"Nigel J. Andrews" <nandrews@investsystems.co.uk> writes:
> so I would say it's not accessable from other functions within the same
> backend. I doubt very much that this data is database wide I can only see it
> being backend specific.
It's definitely backend-local. I imagine you could access another
procedure's GD if you could determine its name (it's built from the
pg_proc OID, I think). However, if you want to share global data across
pltcl functions in the same backend session, you shouldn't bother with
GD at all: just create named global Tcl variables. All pltcl functions
in a backend run in the same interpreter, so they can trivially access
global variables.
regards, tom lane
Tom Lane wrote: >"Nigel J. Andrews" <nandrews@investsystems.co.uk> writes: > > >>so I would say it's not accessable from other functions within the same >>backend. I doubt very much that this data is database wide I can only see it >>being backend specific. >> >> > >It's definitely backend-local. I imagine you could access another >procedure's GD if you could determine its name (it's built from the >pg_proc OID, I think). However, if you want to share global data across >pltcl functions in the same backend session, you shouldn't bother with >GD at all: just create named global Tcl variables. All pltcl functions >in a backend run in the same interpreter, so they can trivially access >global variables. > > > OK. Got that! Thanks a lot! teo