[odb-users] Commit in batch

Davide Anastasia Davide.Anastasia at qualitycapital.com
Wed Mar 28 06:03:35 EDT 2012


Hi Boris,
Actually, it's not that equivalent. Shared_ptr will allocate the memory
every time, and this seems to be quite a big cost in fast applications.
Your method decreased the overhead.

Thanks,
Davide

-----Original Message-----
From: odb-users-bounces at codesynthesis.com
[mailto:odb-users-bounces at codesynthesis.com] On Behalf Of Davide
Anastasia
Sent: 28 March 2012 10:45
To: Boris Kolpackov
Cc: odb-users at codesynthesis.com
Subject: RE: [odb-users] Commit in batch

Hi Boris,
I end up to this approach (essentially equivalent to your second one):


boost::shared_ptr<odb::transaction> m_transaction(new
odb::transaction(m_db->begin()));

....

m_transaction->commit();                                        //
commit transaction
m_transaction.reset(new odb::transaction(m_db->begin()));         //
start new transaction

...

m_transaction->commit();                                        //
commit transaction


Does this look better than t.~transaction (); ?

Thanks a lot Boris, this library is such a great source of code
insipiration for both my work and my personal projects.

D.


-----Original Message-----
From: Boris Kolpackov [mailto:boris at codesynthesis.com]
Sent: 28 March 2012 10:46
To: Davide Anastasia
Cc: odb-users at codesynthesis.com
Subject: Re: [odb-users] Commit in batch

Hi Davide,

Davide Anastasia <Davide.Anastasia at qualitycapital.com> writes:

> My application is quite fast and I would to commit every (let's say)
> 1000 updates, in order to decrease DB overhead. Is there a way to 
> achieve that? Unfortunately, the object odb::transaction, once 
> committed, cannot be restarted again (is that correct?).

Hm, looks like having something like transaction::reset() would be
useful here:

transaction t (db.begin ());

...

t.commit ();
t.reset (db.begin ());

...

t.commit ();

I've added this to the TODO list for the next release. In the meantime
you can use this approach, which is not very elegant but essentially
equivalent:

transaction t (db.begin ());

...

t.commit ();
t.~transaction ();
new (&t) transaction (db.begin ());

...

t.commit ();

Boris




More information about the odb-users mailing list