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]<javascript:>> > 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]<javascript:> > > 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]<javascript:> >> To unsubscribe from this group, send email to >> [email protected] <javascript:> >> 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] <javascript:> > To unsubscribe from this group, send email to > [email protected] <javascript:> > 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
