Yeah charlie i think your best bet is to use node-pool 
(https://github.com/coopernurse/node-pool) to make a set of persistent 
connections, to avoid the creation overhead.  You could then use a separate 
connection not in the pool for your non-transaction requests.

Ted

On Dec 20, 2012, at 12:09 AM, Jake Verbaten <[email protected]> wrote:

> its not hard to write a wrapper around the mysql library to allow a 
> transaction queue where if a second transaction is started it gets 
> transparently queued until the first ends.
> 
> Of course that will suck performance wise but transactions already suck 
> performance wise, if you want that use atomic operations or batch operations.
> 
> 
> On Wed, Dec 19, 2012 at 9:50 PM, Charlie Circle <[email protected]> wrote:
> Yeah, I'm talking about mysql.  Here is my point:
> a) Current library only provide connection per process choice, not suitable 
> for transaction. If you choose one connection per request for each request, 
> it's wasteful.  
> My first thought is only create a connection when there is a transaction, but 
> there is no module support now, maybe I should write one myself.
> 
> b)  Batch processing is suitable for simple business logic, if your logic is 
> combined with a lot of DAO in Service layer, you messed up. Or maybe I should 
> write in stored procedure, but I don't like it either.
> 
> On Thursday, December 20, 2012 12:26:13 PM UTC+8, tedsuo wrote:
> Mark I'm guessing he's talking about mysql, not couch.  It's true that you 
> can't run multiple simultaneous transactions over one mysql connection.  But 
> that's a mysql connection in any language, not just node (unless I'm missed 
> something).  Not a node-mysql expert, but your choices are: 
> 
> a) create a connection per request
> b) create a connection pool, for example with node-pool, and acquire and 
> release a connection on each request
> 
> 
> Ted
> 
> On Dec 19, 2012, at 7:44 PM, Mark Hahn <[email protected]> wrote:
> 
>>> I wonder why there is no one care about it.
>> 
>> I will assume you aren't a troll. I would think that almost all couch
>> users know about ACID and use Couch understanding the trade-offs.
>> CouchDB has distributed features that would not be possible with
>> transactions.  If transactions are necessary for your application then
>> choose a DB with transactions.
>> 
>> On Wed, Dec 19, 2012 at 7:37 PM, Jake Verbaten <[email protected]> wrote:
>>> Transactions are trivial when supported by your database engine.
>>> 
>>> Like [levelup's .batch()][1]
>>> 
>>> var ops = [
>>>    { type: 'del', key: 'father' }
>>>  , { type: 'put', key: 'name', value: 'Yuri Irsenovich Kim' }
>>>  , { type: 'put', key: 'dob', value: '16 February 1941' }
>>>  , { type: 'put', key: 'spouse', value: 'Kim Young-sook' }
>>>  , { type: 'put', key: 'occupation', value: 'Clown' }
>>> ]
>>> 
>>> db.batch(ops, function (err) {
>>>  if (err) return console.log('Ooops!', err)
>>>  console.log('Great success dear leader!')
>>> })
>>> 
>>> If your database driver doesn't give you a sensible clean api then just
>>> write one.
>>> 
>>> If your database doesn't support transactions then your screwed.
>>> 
>>>  [1]: https://github.com/rvagg/node-levelup#batch
>>> 
>>> 
>>> On Wed, Dec 19, 2012 at 7:01 PM, Charlie Circle <[email protected]> wrote:
>>>> 
>>>> For serious web applications, transaction is crucial.
>>>> 
>>>> But node's asynchronous nature do not obey transaction rule,  I wonder why
>>>> there is no one care about it.
>>>> 
>>>> In synchronous applications, you start your transaction, and do database
>>>> operation step by step, when done, just commit it.
>>>> 
>>>> While in node, you must start transaction a place, and commit it in a
>>>> callback chain in a  deep level.
>>>> 
>>>> But it's not the worst thing, because node  share a single connection in a
>>>> process,  we can not sure which  operation is in what transaction, so all
>>>> messed must.
>>>> 
>>>> I've seen a solution in npm, which let you execute database operation in
>>>> sequence, let us go back to synchronous age, not so scalable, right?
>>>> 
>>>> Is there any new idea?
>>>> 
>>>> --
>>>> Job Board: http://jobs.nodejs.org/
>>>> Posting guidelines:
>>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>>>> You received this message because you are subscribed to the Google
>>>> Groups "nodejs" group.
>>>> To post to this group, send email to [email protected]
>>>> 
>>>> To unsubscribe from this group, send email to
>>>> [email protected]
>>>> 
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/nodejs?hl=en?hl=en
>>> 
>>> 
>>> --
>>> Job Board: http://jobs.nodejs.org/
>>> Posting guidelines:
>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>>> You received this message because you are subscribed to the Google
>>> Groups "nodejs" group.
>>> To post to this group, send email to [email protected]
>>> 
>>> To unsubscribe from this group, send email to
>>> [email protected]
>>> 
>>> For more options, visit this group at
>>> http://groups.google.com/group/nodejs?hl=en?hl=en
>> 
>> -- 
>> Job Board: http://jobs.nodejs.org/
>> Posting guidelines: 
>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> You received this message because you are subscribed to the Google
>> Groups "nodejs" group.
>> To post to this group, send email to [email protected]
>> 
>> To unsubscribe from this group, send email to
>> [email protected]
>> 
>> For more options, visit this group at
>> http://groups.google.com/group/nodejs?hl=en?hl=en
> 
> 
> -- 
> Job Board: http://jobs.nodejs.org/
> Posting guidelines: 
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
> 
> 
> -- 
> Job Board: http://jobs.nodejs.org/
> Posting guidelines: 
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en

-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to