by "parse the db results", I mean, the db has a communications format, and 
this must be transformed into whatever javascript is doing.
by "JSON them into the result", I mean, convert the javascript objects into 
a textual representation

On Tuesday, April 10, 2012 5:28:48 PM UTC-4, timp wrote:
>
> or BSON, sorry.
>
> I assume it must parse the db results, 
> and then it must JSON them into the result.
>
>
>
> On Tuesday, April 10, 2012 5:24:45 PM UTC-4, Marak Squires wrote:
>>
>> Where in this code is JSON being parsed?
>>
>> Also, running apache bench from your local to your local node app is not 
>> going to give you accurate results. It will place you in 
>> an approximate ballpark, but if your application is built correctly, your 
>> local system and bench will both cap out before node does. 
>>
>>
>>
>> On Tue, Apr 10, 2012 at 2:13 PM, timp <[email protected]> wrote:
>>
>>> Ok, so I spent the last hour running tests, you can see the gradual 
>>> deterioration:
>>> the biggest impact seems to be json parsing.
>>>
>>>
>>>
>>> # setup
>>> ms = require('mongoskin')
>>> m = { db : ms.db('localhost:27017/standard') }
>>>
>>> # setup one K out
>>> oneK = '';
>>> ppp = 0;
>>> for ppp in [0..1024]
>>>  oneK = oneK + 'x';
>>> ########################
>>> # app.get('/user/loginA', userRoute.loginA);
>>> # app.get('/user/loginB', userRoute.loginB);
>>> # app.get('/user/loginC', userRoute.loginC);
>>> # app.get('/user/loginD', userRoute.loginD);
>>> # app.get('/user/loginE', userRoute.loginE);
>>> # app.get('/user/loginF', userRoute.loginF);
>>> # etc
>>>
>>> # ab -n 1000 -c 20 "http://localhost:3000/user/loginA?name=a&password=a";
>>> # 2205.04 [#/sec] (mean)
>>> exports.loginA = (req, res) ->
>>> res.send(oneK);
>>>
>>> # ab -n 1000 -c 20 "http://localhost:3000/user/loginB?name=a&password=a";
>>> # 439.16 [#/sec] (mean)
>>> # when I run db in verbose mode: 
>>> # Tue Apr 10 16:56:55 [conn1] query standard.users ntoreturn:1 
>>> nreturned:1 reslen:18048 0ms
>>> exports.loginB = (req, res) ->
>>>  m.db.collection('users').findOne(
>>> {name:req.query.name},
>>>  (err, data) ->
>>> res.send(oneK)
>>> )
>>>
>>> exports.getWithName = (name, callback) ->
>>> m.db.collection('users').findOne(
>>> {name:name},
>>>  callback
>>> )
>>>
>>> # ab -n 1000 -c 20 "http://localhost:3000/user/loginC?name=a&password=a";
>>> # Requests per second:    403.78 [#/sec] (mean)
>>> exports.loginC = (req, res) ->
>>> exports.getWithName(req.query.name, (err, data) ->
>>>  res.send(oneK)
>>> )
>>>
>>> # ab -n 1000 -c 20 "http://localhost:3000/user/loginD?name=a&password=a";
>>> # Requests per second:    331.83 [#/sec] (mean)
>>> exports.loginD = (req, res) ->
>>> exports.getWithName(req.query.name, (err, data) ->
>>>  res.send(data)
>>> )
>>>
>>> exports.getWithNamePassword = (name, password, callback) ->
>>>  exports.getWithName(
>>> name,
>>> (err, user) ->
>>>  if (user.password != password)
>>> callback("validation failed", null)
>>> else
>>>  callback(null, user)
>>> )
>>>
>>> # ab -n 1000 -c 20 "http://localhost:3000/user/loginE?name=a&password=a";
>>> # Requests per second:    331.35 [#/sec] (mean)
>>> exports.loginE = (req, res) ->
>>> exports.getWithNamePassword(req.query.name, req.query.password, (err, 
>>> data) ->
>>>  res.send(data)
>>> )
>>>
>>> # using external service
>>> userService = require('../../service/userService')
>>>
>>> # ab -n 1000 -c 20 "http://localhost:3000/user/loginF?name=a&password=a";
>>> # Requests per second:    324.92 [#/sec] (mean)
>>> exports.loginF = (req, res) ->
>>> exports.getWithNamePassword(req.query.name, req.query.password, (err, 
>>> data) ->
>>>  res.send(data)
>>> )
>>>
>>>
>>> exports.getShop = (callback) ->
>>> m.db.collection('items').find({}).toArray(
>>>  (err, data) ->
>>> pruned = (item.shop for item in data)
>>> log.debug("getShop has " + pruned.length + " items")
>>>  callback(err, pruned)
>>> )
>>>
>>> # ab -n 1000 -c 20 "http://localhost:3000/user/loginG?name=a&password=a";
>>> # Requests per second:    512.91 [#/sec] (mean)
>>> exports.loginG = (req, res) ->
>>> exports.getShop( (err, data) ->
>>> res.send(data)
>>>  )
>>>
>>> async = require('async')
>>>
>>> # ab -n 1000 -c 20 "http://localhost:3000/user/loginH?name=a&password=a";
>>> # Requests per second:    279.72 [#/sec] (mean)
>>> exports.loginH = (req, res) ->
>>> async.auto({
>>> user: (callback) ->
>>>  userService.getWithNamePassword(req.query.name, req.query.password, 
>>> callback)
>>> shop: (callback) ->
>>>  exports.getShop(callback)
>>> }, (err, data) ->
>>> res.send(oneK)
>>>  )
>>> # ab -n 1000 -c 20 "http://localhost:3000/user/loginI?name=a&password=a";
>>> # Requests per second:    218.37 [#/sec] (mean)
>>> exports.loginI = (req, res) ->
>>> async.auto({
>>> user: (callback) ->
>>>  userService.getWithNamePassword(req.query.name, req.query.password, 
>>> callback)
>>> shop: (callback) ->
>>>  exports.getShop(callback)
>>> }, (err, data) ->
>>> res.send([data.user, data.shop])
>>>  )
>>> # ab -n 1000 -c 100 "http://localhost:3000/user/loginI?name=a&password=a
>>> "
>>> # Requests per second:    187.07 [#/sec] (mean)
>>>
>>>
>>>
>>>
>>>
>>> On Tuesday, April 10, 2012 4:12:40 PM UTC-4, Marak Squires wrote:
>>>>
>>>> 60rps for an express / mongo app seems way off. I suspect a possible 
>>>> flaw in application code itself. 
>>>>
>>>> Perhaps there is bottleneck in application where logic is being fired 
>>>> on every incoming request which should not be. Maybe connection for 
>>>> mongodb 
>>>> is not being pooled. Perhaps there is performance flaw in one of the 
>>>> user-land you are using. I am not sure of what issue is, but I'm fairly 
>>>> certain there is room for improvement. 
>>>>
>>>>
>>>>
>>>> On Tue, Apr 10, 2012 at 10:15 AM, timp <[email protected]> wrote:
>>>>
>>>>> Greetings,
>>>>>
>>>>> I was wondering if someone who has experience with working with 
>>>>> scaling problems could give me some insight on an issue.
>>>>>
>>>>> Long story:
>>>>>
>>>>> A)
>>>>>
>>>>> So- I'm making an iPhone/iPad app, which basically is a spiffy view of 
>>>>> json data provided by a server.  The app makes modifications to the json, 
>>>>> the server stores them in mongodb, etc.  Model view in the form of a game.
>>>>>
>>>>> I set one of my goals as to have the server run as cheaply as 
>>>>> possible, so that even if the app was not popular, I could keep it up 
>>>>> with 
>>>>> minimal cost/overhead.
>>>>>
>>>>>
>>>>> B)
>>>>>
>>>>> At first I wrote the server in symfony2.  But, I'm weary of php, 
>>>>> especially when I read the documentation for the "apns" (apple push 
>>>>> notification) plugin, which basically says, "well, I wouldn't use what I 
>>>>> wrote if you have a lot of users, but you can if you want."
>>>>>
>>>>> C)
>>>>>
>>>>> So then I said, let's do "grails."  Promises to be fast.  I like 
>>>>> java/groovy whatever.  I like that I can refactor java without wondering 
>>>>> what I'm breaking.  But then the throughput was *very* bad.   Let's say, 
>>>>> 20 
>>>>> connections per second, in production war mode, to do trivial (but not 
>>>>> hello world, json blahblah blah) things.
>>>>>
>>>>> I've done some some work on games.  1 seconds on my modern computer is 
>>>>> like a whole day on a computer 10 years ago.  It is unacceptable to have 
>>>>> only 10-20 pages a second, even if I've messed up the configuration. 
>>>>>
>>>>> D)
>>>>>
>>>>> So then, this programmer next to me was talking about nodeJS.  About 
>>>>> how great it is.  So this last friday, I ported the server (which is all 
>>>>> of 
>>>>> 500 lines or so) from grails to nodeJS.  Using all the callback stuff, 
>>>>> async.auto, etc etc..    But then I'm getting on 60 connections per 
>>>>> second. 
>>>>>  Apparently Json is actually really slow or something.  I did some 
>>>>> optimization (one of which is just clipping data, which is unacceptable), 
>>>>> and profiled and got it to ~120 a second.  (I'm using the most intensive 
>>>>> function as a baseline).
>>>>>
>>>>> E)
>>>>> So then, I thought: "this is ridiculous."  (And I became compulsive. 
>>>>>  Which sucks.)  And on Saturday and Sunday, I wrote a non blocking web 
>>>>> server in c++, modules and everything.  (I did rip and clean code from a 
>>>>> previously personal project).  And I'm getting ~2000 completions a 
>>>>> second. 
>>>>>
>>>>>
>>>>> So you're reading this and saying, "duh.  Custom compiled c++ will of 
>>>>> course be faster than javascript running in a generic framework.  And 
>>>>> you've probably messed up configuration or something somewhere."
>>>>>
>>>>> I know this.  I feel like I just lost the weekend to some stupid 
>>>>> compulsion. But at the same time, I am truly annoyed at how slow these 
>>>>> web 
>>>>> servers/frameworks are.
>>>>>
>>>>>
>>>>> ------------------------
>>>>> ------------------------
>>>>> ------------------------
>>>>>
>>>>>
>>>>> So my question is this:
>>>>>
>>>>> How do real scaling companies deal with this problem?  
>>>>> Non cacheable non static page server.
>>>>>
>>>>> Does scaling become a business decision?  
>>>>>
>>>>> Are things really slow, just because they can be?  Why do people think 
>>>>> "nodeJS fast" ?
>>>>>
>>>>> Or do real scaling companies have C/C++ services, which accept 
>>>>> connections from a front end in nodeJS.  (because when nodeJS doesn't 
>>>>> actually do anything, it really is only 1/6 slower than pure C/C++ 
>>>>> solution, which, I guess, is pretty fast.)?
>>>>>
>>>>> How close is v8 to a theoretical maximum?  
>>>>> (theoretical maximum would be, I guess, compiled code is near gcc -O3, 
>>>>> and compilation is linear with a small coefficient.)
>>>>>
>>>>> Why aren't web server pages through lvmm?  It should be possible to 
>>>>> create a fibered (which is really what continuations come down to it 
>>>>> seems 
>>>>> to me at this moment), lvmm, jitter, any language (which lvmm supports), 
>>>>> solution to a web page.
>>>>>
>>>>> ----
>>>>>
>>>>> So, if anyone has any thoughts, let me know.  If I've said anything 
>>>>> which may be rude, I am not trying to be.
>>>>> In previous experience, I was never concerned with speed, because I 
>>>>> was never before, directly paying for it.
>>>>>
>>>>> I guess I'll run the server on nodeJS, and just load balance it if I 
>>>>> ever need to.
>>>>> Although, I would very much rather have a lvmm'd pages plugged into a 
>>>>> C/C++ server.
>>>>>
>>>>> ----
>>>>>
>>>>> Thoughts?  I this all academic: if things are popular, you will make 
>>>>> money, and scaling will becoming a business issue?
>>>>>
>>>>>
>>>>> -tim
>>>>>
>>>>>  -- 
>>>>> 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+unsubscribe@**googlegroups.com<nodejs%[email protected]>
>>>>> 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>
>>>>>
>>>>
>>>>
>>>>
>>>> -- 
>>>> -- 
>>>> Marak Squires
>>>> Co-founder and Chief Evangelist
>>>> Nodejitsu, Inc.
>>>> [email protected]
>>>>
>>>>  
>>> On Tuesday, April 10, 2012 4:12:40 PM UTC-4, Marak Squires wrote:
>>>>
>>>> 60rps for an express / mongo app seems way off. I suspect a possible 
>>>> flaw in application code itself. 
>>>>
>>>> Perhaps there is bottleneck in application where logic is being fired 
>>>> on every incoming request which should not be. Maybe connection for 
>>>> mongodb 
>>>> is not being pooled. Perhaps there is performance flaw in one of the 
>>>> user-land you are using. I am not sure of what issue is, but I'm fairly 
>>>> certain there is room for improvement. 
>>>>
>>>>
>>>>
>>>> On Tue, Apr 10, 2012 at 10:15 AM, timp <[email protected]> wrote:
>>>>
>>>>> Greetings,
>>>>>
>>>>> I was wondering if someone who has experience with working with 
>>>>> scaling problems could give me some insight on an issue.
>>>>>
>>>>> Long story:
>>>>>
>>>>> A)
>>>>>
>>>>> So- I'm making an iPhone/iPad app, which basically is a spiffy view of 
>>>>> json data provided by a server.  The app makes modifications to the json, 
>>>>> the server stores them in mongodb, etc.  Model view in the form of a game.
>>>>>
>>>>> I set one of my goals as to have the server run as cheaply as 
>>>>> possible, so that even if the app was not popular, I could keep it up 
>>>>> with 
>>>>> minimal cost/overhead.
>>>>>
>>>>>
>>>>> B)
>>>>>
>>>>> At first I wrote the server in symfony2.  But, I'm weary of php, 
>>>>> especially when I read the documentation for the "apns" (apple push 
>>>>> notification) plugin, which basically says, "well, I wouldn't use what I 
>>>>> wrote if you have a lot of users, but you can if you want."
>>>>>
>>>>> C)
>>>>>
>>>>> So then I said, let's do "grails."  Promises to be fast.  I like 
>>>>> java/groovy whatever.  I like that I can refactor java without wondering 
>>>>> what I'm breaking.  But then the throughput was *very* bad.   Let's say, 
>>>>> 20 
>>>>> connections per second, in production war mode, to do trivial (but not 
>>>>> hello world, json blahblah blah) things.
>>>>>
>>>>> I've done some some work on games.  1 seconds on my modern computer is 
>>>>> like a whole day on a computer 10 years ago.  It is unacceptable to have 
>>>>> only 10-20 pages a second, even if I've messed up the configuration. 
>>>>>
>>>>> D)
>>>>>
>>>>> So then, this programmer next to me was talking about nodeJS.  About 
>>>>> how great it is.  So this last friday, I ported the server (which is all 
>>>>> of 
>>>>> 500 lines or so) from grails to nodeJS.  Using all the callback stuff, 
>>>>> async.auto, etc etc..    But then I'm getting on 60 connections per 
>>>>> second. 
>>>>>  Apparently Json is actually really slow or something.  I did some 
>>>>> optimization (one of which is just clipping data, which is unacceptable), 
>>>>> and profiled and got it to ~120 a second.  (I'm using the most intensive 
>>>>> function as a baseline).
>>>>>
>>>>> E)
>>>>> So then, I thought: "this is ridiculous."  (And I became compulsive. 
>>>>>  Which sucks.)  And on Saturday and Sunday, I wrote a non blocking web 
>>>>> server in c++, modules and everything.  (I did rip and clean code from a 
>>>>> previously personal project).  And I'm getting ~2000 completions a 
>>>>> second. 
>>>>>
>>>>>
>>>>> So you're reading this and saying, "duh.  Custom compiled c++ will of 
>>>>> course be faster than javascript running in a generic framework.  And 
>>>>> you've probably messed up configuration or something somewhere."
>>>>>
>>>>> I know this.  I feel like I just lost the weekend to some stupid 
>>>>> compulsion. But at the same time, I am truly annoyed at how slow these 
>>>>> web 
>>>>> servers/frameworks are.
>>>>>
>>>>>
>>>>> ------------------------
>>>>> ------------------------
>>>>> ------------------------
>>>>>
>>>>>
>>>>> So my question is this:
>>>>>
>>>>> How do real scaling companies deal with this problem?  
>>>>> Non cacheable non static page server.
>>>>>
>>>>> Does scaling become a business decision?  
>>>>>
>>>>> Are things really slow, just because they can be?  Why do people think 
>>>>> "nodeJS fast" ?
>>>>>
>>>>> Or do real scaling companies have C/C++ services, which accept 
>>>>> connections from a front end in nodeJS.  (because when nodeJS doesn't 
>>>>> actually do anything, it really is only 1/6 slower than pure C/C++ 
>>>>> solution, which, I guess, is pretty fast.)?
>>>>>
>>>>> How close is v8 to a theoretical maximum?  
>>>>> (theoretical maximum would be, I guess, compiled code is near gcc -O3, 
>>>>> and compilation is linear with a small coefficient.)
>>>>>
>>>>> Why aren't web server pages through lvmm?  It should be possible to 
>>>>> create a fibered (which is really what continuations come down to it 
>>>>> seems 
>>>>> to me at this moment), lvmm, jitter, any language (which lvmm supports), 
>>>>> solution to a web page.
>>>>>
>>>>> ----
>>>>>
>>>>> So, if anyone has any thoughts, let me know.  If I've said anything 
>>>>> which may be rude, I am not trying to be.
>>>>> In previous experience, I was never concerned with speed, because I 
>>>>> was never before, directly paying for it.
>>>>>
>>>>> I guess I'll run the server on nodeJS, and just load balance it if I 
>>>>> ever need to.
>>>>> Although, I would very much rather have a lvmm'd pages plugged into a 
>>>>> C/C++ server.
>>>>>
>>>>> ----
>>>>>
>>>>> Thoughts?  I this all academic: if things are popular, you will make 
>>>>> money, and scaling will becoming a business issue?
>>>>>
>>>>>
>>>>> -tim
>>>>>
>>>>>  -- 
>>>>> 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+unsubscribe@**googlegroups.com<nodejs%[email protected]>
>>>>> 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>
>>>>>
>>>>
>>>>
>>>>
>>>> -- 
>>>> -- 
>>>> Marak Squires
>>>> Co-founder and Chief Evangelist
>>>> Nodejitsu, Inc.
>>>> [email protected]
>>>>
>>>>   -- 
>>> 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
>>>
>>
>>
>>
>> -- 
>> -- 
>> Marak Squires
>> Co-founder and Chief Evangelist
>> Nodejitsu, Inc.
>> [email protected]
>>
>>  

-- 
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