游戏排行榜

什么是排行榜?

排行榜(游戏邦注:即显示排名前列的竞争者的名字和当前分数(或其他数据点)的记分牌)的概念对于电脑游戏世界来说是至关重要的,但现在排行榜已经不仅仅是关于游戏了。它们是关于游戏化的,是一种更广泛的实施,可以包含任何具有共同目标的群体(同事、学生、销售团队、健身团队、志愿者等等)。

排行榜可以通过公开展示每个小组成员的当前排名来鼓励集团的健康竞争。他们还提供了一种明确的方法来查看整个团队的持续成就,因为成员迈向目标。

游戏排行榜的游戏化

通过排行榜的任务和目标的游戏是一种激励人们的好方法,通过向其他与其他小组成员相比,他们的排名持续反馈。做得好,这可以导致建立团体凝聚力的健康竞争。

这是一个简单的排行榜的图形示例,该公司可能会用来激励员工参加其雇主健康计划。

在这个例子中,员工可以看到排名最高的竞争对手以及他们当前的分数。他们还可以看到比赛剩下的时间和激励奖金。当然,随着数据的变化(随着用户上传经过验证的步数),排名也会实时变化。

排行榜有两种类型:

绝对游戏排行榜用全球标准对所有竞争对手进行排名。通常情况下,这些页面显示的是群组中排名靠前的成员,比如top10。

相对排行榜等级参与者与数据的不同方面的关系,以便根据更窄或相对标准进行分组。这可能需要复杂的计算以多种方式滑动数据。例如,常见的游戏场景是一个视图,它显示了给定竞争对手和竞争对手的排名在于它们之上。

当今排行榜中的挑战

在我们这个互联网连接的世界里,热门游戏的排行榜可以被成千上万甚至上百万的竞争对手共享。这同样适用于排行榜的非传统用途,如健身和健康应用程序和社交媒体,或内部组织任务,如客户服务、物流或减少欺诈。

用于排行榜的数据是不断更新的,用户希望看到以多种方式分割的数据。这使得排行榜成为实时分析的绝佳范例,同时也展示了你的数据层处理读、写、排序和其他关键操作的速度。

排行榜带来的技术挑战包括:

  • 数百万用户的大规模尺度
  • 对大量属性进行数学计算(以多种方式分析数据以获得数据的不同视图)
  • 提供高可用性的实时排行榜访问
  • 允许用户在社交媒体上分享他们的排行榜数据
  • 允许用户接收通知作为对排行榜更改感兴趣的属性
  • 允许应用程序以全球的完全分布式方式更新排行榜以及在此处进行操作,同时还从任何位置提供全局传输的排行榜状态

实时提供这些数据并保持系统可用性超出了许多web技术的范围。然而,这是一个挑战,Redis企业解决的数据结构建立像这样的用例,并万博体育彩与各种部署选项,Redis企业提供。

为什么要万博体育彩用Redis Enterprise来做排行榜?

排序集(zset)内的Redis是一个内置的数据结构,使排行榜易于创建和操作。

万博体育彩redis企业基于一个共享无,对称架构这使得数据集的大小线性地、无缝地增长,而不需要更改应用程序代码。

万博体育彩Redis企业版提供了多种高可用性模型,并允许您以地理分布的方式部署Redis,同时在需要时为用户提供本地延迟。

多个持久性选项(每写的AOF、每秒的AOF和快照)不会影响性能,可以确保您在发生故障后不必重新构建数据库服务器。

支持非常大的数据集通过使用智能分层访问内存(RAM,持久存储器或闪存)可确保您可以扩展数据集以满足用户的需求,而不会显着影响性能。

深入排序

创建一个排序集很容易使用RedisZADD命令。例如,假设将一组玩家添加到排行榜中。每个玩家都由一个用户名和玩家的分数组成,分数会随着时间的推移而不断变化

添加一个球员到一个排序的集合很容易,只要使用ZADD命令,并传递集合的名称,分数和球员的名字:

ZADD球员200弗雷德

如果该集合不存在,Redis将创建它。如果它确实存在,那么Redis添加新的数据到现有的集合。排序集合中的每个条目必须是唯一的,所以如果玩家名(成员)不存在,那么它将被添加到集合中。但如果成员已经存在,则将其值设置为提供的新值。内置的排序设置命令让您轻松地执行快速,本机排序和报告操作。

例如,ZRANGE命令返回一个成员范围。ZRANGEBYSCORE返回一个分数范围内的成员范围。ZRANK返回指定成员的排名。

Redis使用zincrby命令将任何播放器的分数易于增量,通过成员名称和增加分数的金额。

此外,您可以为游戏/应用程序管理多个排序集。例如,全局排序集包括每个锦标赛的聚合分数,然后是每个锦标赛的多个排序集。然后,您可以使用Redis的独特功能进行排序集之间的操作,例如ZunionStore.对于union手术,没有重量。

这些简单的数据示例不显示图形类型的数据,但这是Redis Sorted Set功能的一部分:它是内存中的纯数据,不绑定到任何视图。这意味着您可以使用数据以任何您喜欢的方式来显示它。

如何创建排行榜

让我们快速查看如何在先前现有的Web应用程序旁边实现节点.JS中的排行榜。使用Node Package Manager(NPM),使用简单命令将Redis添加到Web应用程序很容易npm安装复述,

redis节点包安装到Web App项目中,您可以通过JavaScript API访问Redis功能。(官方文件node_redis github存储库可以帮助你开始。)

要演示,让我们使用排序集创建一个简单的内存数据库。我们将创建名为播放器的成员:[UniqueId],其中uniqueID是一个整数值,当用户加入竞争时,您的JavaScript或Python代码很容易生成。

分数可以是你想用来给玩家排名的任何数字数据(游戏邦注:例如公司健康计划中的每日步数,在电脑游戏中击落外星人等)。

基本的玩家数据是这样的:

排行榜-PlayerData.

现在看一下您可以用于显示数据的一点节点.JS代码。

使用哈希来存储多个值

您可以创建一个可以被多个变量分割的数据集。为此,将数据存储在表示每个竞争对手的结构中是很有帮助的。Redis提供了这样一种结构,叫做Hash。一个Hash可以包含多个与一个键相关联的名称-值对。

您可以使用一个简单的数字键作为哈希中的唯一标识符,然后将该唯一键与一个Sorted Set关联,后者将包含分数和键。通过这种方式,您可以快速获得您的顶级竞争对手或一系列竞争对手的分数。然后,如果需要更多数据,可以使用存储在Sorted Set中的键值轻松地从Hash中获取数据。

创建一个Redis Hash很容易。这个Hash名为allPlayers,使用如下格式:

hset [唯一ID(识别散列)] [属性名称] [属性值] ...

接下来,创建一个名为player:100的新Hash,并添加一个screenName属性,该属性的值为Fred。您可以将散列键设置为100,但是使用[stringID:IntegerID]的格式使其可读性更好。当您添加另一个玩家时,您将创建一个新的Hash键,如player:101。

hset播放器:100 screenName Fred

如果要检索为特定哈希存储存储的所有属性和值(名称 - 值对),只需使用此命令:

HGETALL PLAYER:100

此时您可以看到有一个名称-值对。

1)“屏幕名”
2)“弗雷德”

散列是灵活的结构,很容易动态地添加属性和值。

假设你想保存玩家最后一次登录的日期:

hset player:100 lastLoggedIn 2019-07-30

现在当你再次调用hgetall时,你会看到:

1)“屏幕名”
2)“弗雷德”
3)“Lastloggedin”
4)“2019-07-30”

这只是将每个用户添加到你的allPlayers哈希与自己的唯一ID的问题。然后,您可以将它们与包含每个玩家得分的Sorted Set相关联。

这是一个快速的图表,展示了如何将数据捆绑在一起:

排行榜-TATACHART.

添加哈希(播放器:NNN)后,您可以使用列表,当您将数据添加到排序集时,您可以使用它们利用这些播放器数据键。这就是您如何利用Redis内存数据库的权力与巨大的数据集(数百万玩家!)跟踪每个玩家的排名,但保持惊人的快速。

现在你可以很容易地实现一个解决方案,使用Node和node_redis包来提取数据,这样你就可以在你的web应用上保持排行榜的新鲜。这个工作很容易使用node_redis包API,它允许你按名称(playerRank)拉回排序集。

万博体育彩Redis Enterprise对于保持您的排行榜新鲜,您的用户来看他们的排名至关重要。


探索更多的


Baidu