当前位置:  开发笔记 > 数据库 > 正文

noSQL/SQL/RoR:尝试为游戏构建可扩展的评级表

如何解决《noSQL/SQL/RoR:尝试为游戏构建可扩展的评级表》经验,为你挑选了1个好方法。

我正在努力解决复杂的事情(因为它在我看来).

我有下一个实体:

    玩家(其中很少,名字如"John","Peter"等).每个都有唯一的ID.为简单起见,我们认为这是他们的名字.

    游戏(其中很少,名为"捉迷藏","跳跃和奔跑"等).相同 - 每个都有唯一的ID.为了简单起见,现在让它成为它的名字.

    SCORE(这是数字).

那么,它是如何工作的.

每个玩家都可以玩多个游戏.他在每场比赛中获得了一些分数.

我需要建立评级表 - 而不是一个!

表#1:最常玩游戏表#2:所有游戏中的最佳玩家(比如每个游戏中的总SCORE).表#3:每个GAME的最佳玩家(特别是那个GAME的SCORE).

我可以马上建立一些东西,但那不行.我将有超过10,000名球员; 和15场比赛,肯定会增长.对于游戏中的玩家,得分可以低至0,并且高达1,000,000(不确定此时是否可以更高).所以我真的需要一些相关数据.

有什么建议?

我打算用SQL来做,但可能只是用它来进行键值存储; 任何事情 - 欢迎任何想法.

谢谢!



1> BerggreenDK..:

我会说两件事.

首先我回答你的问题.其次我认为你应该做的事情.

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)

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有