Thank you!

Just to clarify. 12ms/request includes the time to define all system
tables, your tables, create a new session, execute controller, action,
view and layout, not just the time to execute the db.py. Correct?

Can you post your results on AlterEgo? OR would you mind if I post it
and quote you as author of the benchmarks?

Massimo

On Aug 24, 5:51 am, what_ho <a...@viovi.com> wrote:
> Sure thing -
>
> I modified the auth line to auth.define_tables(migrate=False) , and
> added migrate=False as the last parameter of each of the 5 test tables
>
> So with migrate=false added:
>
> full db.py, not compiled - 18.2s
> full db.py, compiled - 12.1s
>
> compared to previous results with migration on:
> not compiled: 22.4s
> compiled: 16s
>
> - Alex
>
> On Aug 24, 11:19 am, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > thanks for this test. Would you be able to also test them setting
>
> > db.define_table(....,migrate=False)
>
> > ?
>
> > which is what people should do on production.
>
> > Massimo
>
> > On Aug 24, 5:07 am, what_ho <a...@viovi.com> wrote:
>
> > > I did some quick and dirty performance tests to measure the time taken
> > > by db.define_table calls.
>
> > > Test was as follows:
> > > - Run web2py locally, with built-in web server
> > > - Create new application 'perftest' in web2py admin interface
> > > - Add 5 dummy table definitions to db.py, uncomment mail and auth
> > > settings (see copy of my db.py at end of this message)
> > > - Run the HP tool httperf to access perftest home page 1000 times
> > > using the following command:
> > > httperf --hog --server=localhost --port 8000 --uri /perftest/default/
> > > index --num-conns=1000
> > > - Time tests with db.py as defined below, with table definitions
> > > removed, and with db.py file removed completely
>
> > > To remove the table definitions I commented out the line
> > > 'auth.define_tables()' and all lines starting 'db.define_table' in
> > > db.py
>
> > > For reference I am running Ubuntu Linux (karmic alpha), Intel Dual
> > > Core 2.0Ghz, 4GB RAM. httperf version used is 0.9.0 (available from
> > > synaptic package manager). web2py version 1.66.2, python 2.5
>
> > > Results - time to receive 1000 pages from web2py built-in webserver:
>
> > > Not compiled:
> > > Full db.py - 22.4s
> > > No table defs in db.py - 11.5s
> > > No db.py at all 9.6s
>
> > > Compiled:
> > > Full db.py - 16s
> > > No table defs - 5.7s
> > > No db.py at all 4.1s
>
> > > This does appear to show there would be a performance benefit to
> > > sharing the db object definitions between page requests.
>
> > > Yarko - I like your suggestion of putting table definitions in gluon
> > > just as a quick hack to compare performance - I will try this next.
>
> > > Please find the source of the db.py file I used below:
>
> > > # coding: utf8
>
> > > if request.env.web2py_runtime_gae:            # if running on Google
> > > App Engine
> > >     db = DAL('gae')                           # connect to Google
> > > BigTable
> > >     session.connect(request, response, db=db) # and store sessions and
> > > tickets there
> > > else:                                         # else use a normal
> > > relational database
> > >     db = DAL('sqlite://storage.sqlite')       # if not, use SQLite or
> > > other DB
>
> > > from gluon.tools import *
> > > auth=Auth(globals(),db)                      # authentication/
> > > authorization
> > > auth.settings.hmac_key='6944f00d-1758-41e4-8fdb-625b0be17e1a'
> > > auth.define_tables()                         # creates all needed
> > > tables
> > > crud=Crud(globals(),db)                      # for CRUD helpers using
> > > auth
> > > service=Service(globals())                   # for json, xml, jsonrpc,
> > > xmlrpc, amfrpc
> > > crud.settings.auth=auth                      # enforces authorization
> > > on crud
> > > mail=Mail()                                  # mailer
> > > mail.settings.server='smtp.gmail.com:587'    # your SMTP server
> > > mail.settings.sender='....@gmail.com'         # your email
> > > mail.settings.login='username:password'      # your credentials or
> > > None
> > > auth.settings.mailer=mail                    # for user email
> > > verification
> > > auth.settings.registration_requires_verification = True
> > > auth.settings.registration_requires_approval = True
> > > auth.messages.verify_email = \
> > >   'Click on the linkhttp://.../user/verify_email/%(key)stoverify
> > > your email'
>
> > > db.define_table('perftest1',
> > >     SQLField('string1','string'),
> > >     SQLField('text1','text'),
> > >     SQLField('blob1','blob'),
> > >     SQLField('password1','password'),
> > >     SQLField('upload1','upload'),
> > >     SQLField('boolean1','boolean'),
> > >     SQLField('integer1','integer'),
> > >     SQLField('double1','double'),
> > >     SQLField('date1','date'),
> > >     SQLField('time1','time'),
> > >     SQLField('datetime1','datetime'))
>
> > > db.define_table('perftest2',
> > >     SQLField('string2','string'),
> > >     SQLField('text2','text'),
> > >     SQLField('blob2','blob'),
> > >     SQLField('password2','password'),
> > >     SQLField('upload2','upload'),
> > >     SQLField('boolean2','boolean'),
> > >     SQLField('integer2','integer'),
> > >     SQLField('double2','double'),
> > >     SQLField('date2','date'),
> > >     SQLField('time2','time'),
> > >     SQLField('datetime2','datetime'))
>
> > > db.define_table('perftest3',
> > >     SQLField('string3','string'),
> > >     SQLField('text3','text'),
> > >     SQLField('blob3','blob'),
> > >     SQLField('password3','password'),
> > >     SQLField('upload3','upload'),
> > >     SQLField('boolean3','boolean'),
> > >     SQLField('integer3','integer'),
> > >     SQLField('double3','double'),
> > >     SQLField('date3','date'),
> > >     SQLField('time3','time'),
> > >     SQLField('datetime3','datetime'))
>
> > > db.define_table('perftest4',
> > >     SQLField('string4','string'),
> > >     SQLField('text4','text'),
> > >     SQLField('blob4','blob'),
> > >     SQLField('password4','password'),
> > >     SQLField('upload4','upload'),
> > >     SQLField('boolean4','boolean'),
> > >     SQLField('integer4','integer'),
> > >     SQLField('double4','double'),
> > >     SQLField('date4','date'),
> > >     SQLField('time4','time'),
> > >     SQLField('datetime4','datetime'))
>
> > > db.define_table('perftest5',
> > >     SQLField('string5','string'),
> > >     SQLField('text5','text'),
> > >     SQLField('blob5','blob'),
> > >     SQLField('password5','password'),
> > >     SQLField('upload5','upload'),
> > >     SQLField('boolean5','boolean'),
> > >     SQLField('integer5','integer'),
> > >     SQLField('double5','double'),
> > >     SQLField('date5','date'),
> > >     SQLField('time5','time'),
> > >     SQLField('datetime5','datetime'))
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to