我正在努力解决复杂的事情(因为它在我看来).
我有下一个实体:
玩家(其中很少,名字如"John","Peter"等).每个都有唯一的ID.为简单起见,我们认为这是他们的名字.
游戏(其中很少,名为"捉迷藏","跳跃和奔跑"等).相同 - 每个都有唯一的ID.为了简单起见,现在让它成为它的名字.
SCORE(这是数字).
那么,它是如何工作的.
每个玩家都可以玩多个游戏.他在每场比赛中获得了一些分数.
我需要建立评级表 - 而不是一个!
表#1:最常玩游戏表#2:所有游戏中的最佳玩家(比如每个游戏中的总SCORE).表#3:每个GAME的最佳玩家(特别是那个GAME的SCORE).
我可以马上建立一些东西,但那不行.我将有超过10,000名球员; 和15场比赛,肯定会增长.对于游戏中的玩家,得分可以低至0,并且高达1,000,000(不确定此时是否可以更高).所以我真的需要一些相关数据.
有什么建议?
我打算用SQL来做,但可能只是用它来进行键值存储; 任何事情 - 欢迎任何想法.
谢谢!
我会说两件事.
首先我回答你的问题.其次我认为你应该做的事情.
1.答案:
SQL,它易于开发和测试+生产一段时间.玩家的表,INT或其他uniq值,不是字符串.(我知道你说的是一个样本,但是去寻找"长字"的内容应该给你足够的唯一ID同样适合游戏.现在将高分保持在一起的关键是两者之间的关系.
分数(表格关系):
[Player ID][Game_ID][Score]
得分是一个数值...我不知道你的每个游戏的最高得分,所以你弄清楚什么类型是足够的.
现在,这应该很容易实现一个开始.让它工作.但是不要直接对数据库进行每次调用.
制作3层架构.创建一个数据层和一个业务层,然后是"游戏"层.因此,每个游戏都使用自己的"游戏ID"调用业务层,如:
PlayerSaveScore(int gameID, int playerID, int score)
然后,Businesslayer检查"参数"是否具有正确的大小并且是有效的ID,可能验证该玩家实际在过去的5分钟内已经在会话中等.
验证之后,Businesslayer将数据层调用为"更新表",数据层首先查看该记录是否存在.如果没有,那么它插入它.
层设计 一旦你"在线"(在空中)并且游戏变得流行,那么你就可以开始"升级"了,但是你现在仍然能够通过"未来可扩展的解决方案"开始.请记住,每个游戏都必须调用业务对象/层,而不是直接 - 永远不要!
我已经处于相同的"想过多次这样的想法"但我不断进入一个叫做准备的简单循环,但这几乎从来没有让我进入一个快速运行的现实解决方案.
所以先获得10万名玩家!当它超越时开始担心.
2.部分......如何扩展......建议:
所以这就是构建"businesslayer/webservices"所有麻烦的原因......最重要的是,你的速度问题现在可以很好地解决了.
你可以很简单地实现"缓存".
你做了一个额外的桌子,如果你只有15场比赛,你不需要一张桌子.游戏,但你决定.那只能保持每场比赛的前100名.每次从玩家发布新记录时,都会在此"前100名"上进行选择,并检查发布的值是否进入列表.如果是这样,那么通过更新前100个表并为了额外的速度目的来处理它.
将Top 100的摘录构建为静态数据列表,例如.XML或类似的静态数据.根据您的平台,您可以选择正确的"静态格式".
你甚至可以进一步提高速度.只需保持每场比赛前100名所需的最小值.这将是一个记录pr.游戏.
然后将玩家得分与游戏的"前100名中的最低得分"进行匹配......如果是上面的,那么你有一些"缓存/索引"要做,然后你称之为"巨型":o)
明白这点?我知道这是一个很长的答案,但我想给你一个"完整"的解决方案.
希望您将此标记为您的答案:o)