Thanks Alec. I don't think I will reach those numbers, ever, for one game. This has nothing to do with web2py, but I have a MySQL database with about a 700,000 records and selects are quite slow in it. Some simple queries take 7-8 seconds per query, which is slow in the context of a game. Probably I have not set it up well. But that is what caused me to worry about this.
Anyhow, thanks for the advice. On Mon, Oct 1, 2012 at 9:13 AM, Alec Taylor <alec.tayl...@gmail.com> wrote: > Those are really low numbers. > > When you are getting closer to a billion games a week you should > consider a schema change, e.g.: multi-tenant. > > On Mon, Oct 1, 2012 at 10:54 PM, Curiouslearn <curiousle...@gmail.com> wrote: >> Hi Alec, >> >> I am using mysql backend. I will most probably host it on dotcloud, >> using their Python and MySQL service. >> >> I think as suggested by Cliff and you, I will create only one set of >> tables for all games. As of now I will probably have only about 50 >> datapoints per team. There are no images. Right now I don't anticipate >> more that 20 games per 2-3 months; hence about 20000 (20 teams per >> game x 50 datapoints X 20 games) data points per 2-3 months. I was >> thinking of what would happen when more people use it. But I suppose >> I should not worry about that now. >> >> Thanks. >> >> >> On Mon, Oct 1, 2012 at 7:48 AM, Alec Taylor <alec.tayl...@gmail.com> wrote: >>> Probably not. Where are you hosting this? >>> >>> E.g.: Google App Engine doesn't have "tables", so the whole concept is >>> "irrelevant" there. >>> >>> Also, how much data are you talking per team, and how many teams do >>> you expect to be in the database? >>> >>> Unless you're storing an inordinate amount of images or realtime VOIP >>> recording you won't need to worry about efficiency. >>> >>> On Mon, Oct 1, 2012 at 9:21 PM, Curiouslearn <curiousle...@gmail.com> wrote: >>>> Hi Cliff, >>>> >>>> Thanks very much for your input. I am new to databases and appreciate >>>> the advice. >>>> >>>> I was also thinking of the alternative you are talking about. But >>>> thought that as the number of games played increased, this would >>>> increase the number of records in the tables and make database access >>>> slow. Is this not a good reason to create different set of tables for >>>> each game? Would appreciate any advice regarding this. >>>> >>>> Thanks. >>>> >>>> On Mon, Oct 1, 2012 at 4:46 AM, Cliff Kachinske <cjk...@gmail.com> wrote: >>>>> Do not let your tables proliferate this way. >>>>> >>>>> You need a teams table, even if it contains only the team name or some >>>>> other >>>>> identifier. >>>>> >>>>> You need a games table. >>>>> >>>>> You need to relate these two. One game has multiple teams, I suppose, so >>>>> that makes a one-to-many relationship. >>>>> >>>>> If the same team can participate in more than one game, you need a many to >>>>> many relationship. >>>>> >>>>> The DAL chapter in the Web2py manual explains how to implement these. >>>>> >>>>> Next you add a game_id field to both your offers and decisions tables. >>>>> That >>>>> ties these events to the game. Alternatively you could simply call the >>>>> field 'game', assuming you can remember that it contains the record id of >>>>> the game in question. >>>>> >>>>> You also need to add a team_id field to these tables. That ties each >>>>> record >>>>> to the team involved. >>>>> >>>>> This data structure will allow you to select records for each game, for >>>>> each >>>>> team in a game. If the teams persist, you can also select all the records >>>>> related to the team. >>>>> >>>>> On Sunday, September 30, 2012 5:31:50 PM UTC-4, curiouslearn wrote: >>>>>> >>>>>> Hello, >>>>>> >>>>>> This is a question about recommended practice for doing the following: >>>>>> >>>>>> I want to create a web interface for creating a setup for new games. For >>>>>> example, the web interface will let me specify >>>>>> name of the game, number of teams etc. Based on this information I want >>>>>> to >>>>>> create new database tables for the game. >>>>>> Should the table definitions be given in a controller function, such as >>>>>> in >>>>>> the example below? Is that the recommended way >>>>>> to do this, or is there another way that you would recommend. >>>>>> >>>>>> Thank you. >>>>>> >>>>>> **Controller function for creating tables** >>>>>> >>>>>> def createtables(): >>>>>> if request.post_vars: >>>>>> experimentname = request.post_vars.experimentname >>>>>> numteams = int(float(request.post_vars.numteams)) >>>>>> teams_tablename = "{0}_teams".format(experimentname) >>>>>> offers_tablename = "{0}_offers".format(experimentname) >>>>>> ardecisions_tablename = "{0}_ardecisions".format(experimentname) >>>>>> migrate_teamstablename = "{0}.table".format(teams_tablename) >>>>>> migrate_offerstablename = "{0}.table".format(offers_tablename) >>>>>> migrate_ardecisionstablename = >>>>>> "{0}.table".format(ardecisions_tablename) >>>>>> db.define_table(teams_tablename, >>>>>> Field('teamname', 'string', length=40, required=True, >>>>>> unique=True, notnull=True), >>>>>> Field('passwd', 'password'), >>>>>> Field('role', 'string', length=20, required=True, >>>>>> default='NA'), >>>>>> format = '%(teamname)s', migrate=migrate_teamstablename) >>>>>> # Table showing the ask amount of the first mover >>>>>> referencestring = 'reference {0}'.format(teams_tablename) >>>>>> db.define_table(offers_tablename, >>>>>> Field('round', 'integer'), >>>>>> Field('askamount', 'integer'), >>>>>> Field('payoff', 'integer'), >>>>>> Field('teamname_id', referencestring), >>>>>> migrate = migrate_offerstablename) >>>>>> >>>>>> >>>>>> # Table accept-reject decisions >>>>>> db.define_table(ardecisions_tablename, >>>>>> Field('round', 'integer'), >>>>>> Field('acceptorreject', 'string', length=2), >>>>>> Field('payoff', 'integer'), >>>>>> Field('teamname_id', referencestring), >>>>>> Field('offerer_id', referencestring), >>>>>> migrate = migrate_ardecisionstablename) >>>>>> >>>>>> >>>>>> teamnames = maketeamnames(numteams) >>>>>> for tname in teamnames: >>>>>> db[teams_tablename].update_or_insert(teamname=tname) >>>>>> db.experimentlist.insert(experimentname=experimentname) >>>>>> return dict() >>>>>> >>>>>> >>>>>> >>>>> -- >>>>> >>>>> >>>>> >>>> >>>> -- >>>> >>>> >>>> >>> >>> -- >>> >>> >>> >> >> -- >> >> >> > > -- > > > --