I guess, we can use store procedure for this transaction problem with node. 
Meaning, every transaction process must be in a store procedure altogether 
and node just need to execute that sp.

On Friday, December 21, 2012 1:55:20 PM UTC+8, Charlie Edward wrote:
>
> Yeah, you guys are right, the solution is not so complicated, I just want 
> to make it clear.
> But  all transaction in one queue is not good solution, and this statement 
> is not true:
>   >>Of course that will suck performance wise but transactions already 
> suck performance wise
>
> Innodb is a transactional storage engine, whether you set autocommit to 
> true or false, there is a transaction, the only difference is each 
> transaction per sql or putting a lot of sqls in one transaction. The 
> performance difference of  settting autocommit true or false is not very 
> obvious.  Innodb is just fast enough
>
> We also have a team who is developing a new storage engine which is much 
> faster than innodb, the test result is transactional engine costs twice 
> time over  non-transactional engine, which is also acceptable.
>
>
>
> On Friday, December 21, 2012 2:01:36 AM UTC+8, tedsuo wrote:
>>
>> 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<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<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
>>>> nodejs+un...@**googlegroups.com
>>>>
>>>> For more options, visit this group at
>>>> http://groups.google.com/**group/nodejs?hl=en?hl=en<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<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
>>>> nodejs+un...@**googlegroups.com
>>>>
>>>> For more options, visit this group at
>>>> http://groups.google.com/**group/nodejs?hl=en?hl=en<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<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
>>>> nodejs+un...@**googlegroups.com
>>>>
>>>> For more options, visit this group at
>>>> http://groups.google.com/**group/nodejs?hl=en?hl=en<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

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to