我们都知道的MMO游戏的流行趋势。 在这里玩家彼此面对生活。
我关注的区域,是玩家的动作和比赛结果的存储。
通过适配器Npgsql的使用Csharp的和PostgreSQL V9.0
游戏客户端是基于浏览器的ASP.NET和所有数据库相关的调用处理Csharp的功能
要了解我的查询,请考虑以下情形
我们存储在一个Postgres的表的游戏进度。
例如比赛有四名球员和下面的活动启动
- 每个玩家有100hitpoints开始
- 播放机1罢工(我们指的是一个图表,以打击转化为生命值与随机%量程)
- 播放器2具有92HP,并返回一个光吹,所以PLAYER1具有98hp
上述两个回合现在会在游戏进度表,如
ROW Player1HP Player2HP Strikefrom StrikeTo ReturnStrikeHP Round TimeStamp StrikeMethod
1 100 100 0 0 0 0
2 98 92 P1 P2 2 1
找到,如果比赛已经结束,我们检查3名球员有生命值为零或者gametime经过从去年进步的规定超时值
我们的表具有的PrimaryKey作为tournamentid上playerids的基础的随机32个字符码(8个用于每个播放器)
还有其他列,比如装甲,魔法,咒语,这都得到发扬光大每个球员,总共有48列 - 12每个球员和他们的属性
最后有有比赛的结果,tournamentid,tournament_timestamp,gameresult(完整,PlayerSurrender,InvalidSession,SecurityHack,超时),winnerPlayer,playerMetrics,rowIDfrom,rowIDto一个gameResult表
QUERY
我的问题是集中在对游戏数据库或SQL查询减负
a)如何检测如果一个球员没有在simutaneously记录并开了两个游戏会话,但不必是指数据库或使用SQL
B)如何控制的记录激增到GameProgress表。 让玩家获得更快的响应。 在服务器启动滞后在高峰时间,或当1000名玩家在线
There is a tremendous flow of sql queries, for ex. even in the current game version
There are average/minimum 100 tournaments online per 12 minutes or 500 players / hour
In Game Progress table, We are storing each player move
a 12 round tourament of 4 player there can be 48 records
plus around same number for spells or special items
a total of 96 per tourament or 48000 record inserts per hour (500 players/hour)
我也在考虑使用C#一个后台进程,一直是从GameProgresstable移动过期的比赛记录到另一个数据库,我们有免费的游戏负载的服务器。
C)多久,我们应该运行真空充分的Postgres。
我打开新的应用开源或toPay,可以提高性能。 对于前。 我们使用FastCsvReader http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader提高服务器日志文件枚举。
对于阿文德