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

-- 



Reply via email to