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='y...@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 link http://.../user/verify_email/%(key)s to verify 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 -~----------~----~----~----~------~----~------~--~---