我想说两件事。
首先我回答你的问题。其次,我认为你应该这样做。
1.答案:
SQL,很容易开发和测试+生产一段时间。
玩家表,具有 INT 或其他一些 uniq 值,而不是字符串。 (我知道你说它是一个样本,但是选择应该给你足够的唯一 ID 的“长字”整数
游戏也是如此。现在,保持高分的关键是在两者之间建立关系。
分数(表关系):
[Player ID][Game_ID][Score]
其中 score 是一个数值...我不知道你每场比赛的最高分,所以你弄清楚什么类型就足够了。
现在,这应该很容易实现。让它发挥作用。但不要每次都直接调用数据库。
构建 3 层架构。制作一个数据层和一个业务层,然后是“游戏”层。
因此,每个游戏都使用自己的“游戏 ID”调用业务层,例如:
PlayerSaveScore(int gameID, int playerID, int score)
然后,Businesslayer 会检查“参数”的大小是否正确并且是有效的 ID,也许会验证该玩家实际在过去 5 分钟内一直在会话中等等。
验证后,业务层调用数据层以获取“更新表”,如果记录存在,数据层首先查看该数据层。如果不是,则将其插入。
分层设计
一旦您“在线”(在空中)并且游戏变得流行,那么您就可以开始“升级”,但您仍然可以使用“未来可扩展的解决方案”继续前进。请记住,每个游戏都必须调用业务对象/层,而不是直接调用 - 绝不!
我一直处于同样的“想了很多次”,但我一直进入一个称为准备的简单循环,但这几乎从未让我进入一个快速启动并运行的现实解决方案。
所以首先获得100000名玩家!然后当它超出时开始担心。
2。部分...如何扩展...建议:
这就是我构建“businesslayer/webservices”的所有麻烦的原因......
最重要的是,您的速度问题现在可以很好地解决。
你可以很简单地实现“缓存”。
你做一个额外的桌子,如果你只有 15 场比赛,你不需要桌子公关。游戏,但你决定。那个只保留每场比赛的前100名。每次您发布玩家的新记录时,您都会在此“前 100 名”中进行选择,并检查发布的值是否进入列表。如果是这样,则通过更新前 100 名表来处理它,以提高速度。
将 Top 100 的摘录构建为静态数据列表,例如。 XML 或类似的静态数据。根据您的平台,您可以为自己选择正确的“静态格式”。
您甚至可以进一步提高速度。只需保持获得每场比赛前 100 名所需的最小值即可。那将是一个创纪录的公关。游戏。
然后将玩家得分与游戏的“前 100 名中的最低得分”进行匹配......如果高于,那么你需要做一些“缓存/索引”,然后你称之为“巨型排序”:o)
明白了吗?我知道这是一个很长的答案,但我想向您发布一个“完整”的解决方案。
希望您将此标记为您的答案 :o)