pbxt-discuss team mailing list archive
-
pbxt-discuss team
-
Mailing list archive
-
Message #00091
Re: Row buffers and Objects
On Thu, 27 May 2010 17:27:11 +0200, Paul McCullagh <paul.mccullagh@xxxxxxxxxxxxx> wrote:
> On May 27, 2010, at 4:51 PM, Stewart Smith wrote:
> > On Thu, 27 May 2010 12:36:46 +0200, Paul McCullagh <paul.mccullagh@xxxxxxxxxxxxx
> > > wrote:
> >> On May 26, 2010, at 5:26 AM, Stewart Smith wrote:
> >>> class Tuple
> >>> {
> >>> Tuple(Tuple &t)
> >>> { for(i= 0; i< t.nr_columns(); i++) { set_column(i,
> >>> t.column(i)); } }
> >>> }
> >>
> >> Currently, I can do this with one memcpy, in the cases when PBXT is
> >> using a fixed length record structure.
> >>
> >> But, I guess this is a small price to pay for proper encapsulation.
> >
> > You could probably continue to do so, but the above would be the
> > generic
> > solution.
>
> Well, if I could, that would be great. I am thinking of the case where
> you have a row consisting of 100 integers.
>
> That would mean the difference between 1 memcpy of 400 bytes or 100 4
> byte memcpy's. A big difference in this case.
Yep... optimised conversions would be a necessity.
for updating a row that has 100 ints but you're only
updating 1 int, you want to know that there's just 1.
So optimised conversion routines could possibly get more complex due to
efficiency gains elsewhere...
> I would need a method that returns a pointer to the tuple buffer, and
> the length of the buffer. The method could return NULL if the tuple
> has no buffer, and then I could use the standard copy method.
that could be one simple way to do it...
> int Tupple::column_endian(int colnr)
>
> Based on the result, the engine would know whether to convert or not.
(i'm going to try and think of a rather foolproof way to do endian
safety here... i don't know the solution yet :)
> >> Tuple record[2]
> >
> > Personally, I'd like this to end up just being a memory pool
> > instead, as
> > a lot of the time you don't actually need 2 records and it's just a
> > waste of memory (especially for large tables).
>
> Yup, but a pool introduces another semaphore. And, there is already a
> Handler pool.
Just a pool in the Table, not global. Initial size would be 1, the 2nd
only allocated when needed.
> >> Although this may present a problem with regard to the scope of
> >> validity of Tuples returned by the engine.
> >>
> >> The best for the moment would be that the Tuple is valid until the
> >> next call to the engine on the Cursor that returned the Tuple.
> >
> > agreed.
> >
> > I wouldn't also mind a mechanism that could implement either:
> > a) copying of the tuple
> > b) retain/release
>
> Yes, this would be useful. And easy, as long as Tuples are not shared
> between threads.
Yep. It would be the upper layer who would have to get this right
(e.g. by not sharing).
> > so that if the upper layer did need it for longer it could ask the
> > engine to keep it around and you'd either get a copy (by default) or
> > if
> > the engine is clever, just a reference to the same bit of memory.
>
> Yes, the engine may be able to do this without making a copy. That
> would be an important optimization.
basically pinning the appropriate pages in the buffer pool for some
period of time.
Not materialising blobs would be even better though :)
--
Stewart Smith
References
-
free_table_share() != drizzle
From: Brian Aker, 2010-05-08
-
Re: free_table_share() != drizzle
From: Paul McCullagh, 2010-05-10
-
Re: free_table_share() != drizzle
From: Brian Aker, 2010-05-11
-
Re: free_table_share() != drizzle
From: Paul McCullagh, 2010-05-14
-
Re: free_table_share() != drizzle
From: Brian Aker, 2010-05-14
-
Re: free_table_share() != drizzle
From: Paul McCullagh, 2010-05-14
-
Re: free_table_share() != drizzle
From: Brian Aker, 2010-05-14
-
Re: free_table_share() != drizzle
From: Paul McCullagh, 2010-05-17
-
Re: free_table_share() != drizzle
From: Brian Aker, 2010-05-17
-
Re: free_table_share() != drizzle
From: Paul McCullagh, 2010-05-20
-
Re: free_table_share() != drizzle
From: Brian Aker, 2010-05-20
-
Row buffers and Object (was Re: free_table_share() != drizzle)
From: Paul McCullagh, 2010-05-21
-
Re: Row buffers and Object (was Re: free_table_share() != drizzle)
From: Stewart Smith, 2010-05-24
-
Re: Row buffers and Object (was Re: free_table_share() != drizzle)
From: Paul McCullagh, 2010-05-25
-
Re: Row buffers and Object (was Re: free_table_share() != drizzle)
From: Stewart Smith, 2010-05-26
-
Re: Row buffers and Objects
From: Paul McCullagh, 2010-05-27
-
Re: Row buffers and Objects
From: Stewart Smith, 2010-05-27
-
Re: Row buffers and Objects
From: Paul McCullagh, 2010-05-27