小编Kos*_*ias的帖子

区块链是一个分散的数据库吗?

我理解比特币使用区块链技术来维护所有交易的分散分类账.我还阅读了许多帖子,暗指未来区块链技术的应用,我都不清楚这一点.

区块链技术只是一个分散的数据库,对数据进行了共识验证吗?如果是这种情况,数据库肯定会变得太大而无法有效地分散?

为了帮助我理解,有人能指出一个非比特币区块链应用程序的明确例子吗?

提前致谢.

bitcoin blockchain ethereum hyperledger corda

9
推荐指数
1
解决办法
1617
查看次数

具有过滤功能的巨大排行榜排名

我们正在构建一个大型多人教育游戏,排行榜中有数百万个条目(基于获得的汇总 XP)。游戏结束后,我们需要显示排行榜以及该玩家/学生的排名。但是这个排行榜有几个过滤器(全球/按国家/地区,按月/年/今天,按年龄等)可以混合在一起,例如“让我获得排行榜for my Country for the last month”。组合数约为 20。

我的问题是如何存储这样一个定期更新的结构;每场比赛后必须重新计算排名。目前一个典型的完整排行榜有来自 150 多个国家的玩家的约 500 万个条目。

  1. 我曾经有一个带有 3 个节点的 MySQL 集群表(userid、xps、countryid),但是随着数字变大(> 20K 用户)按 XP 排序(在 DBMS 或需要来自 DB 的所有数据的应用程序中)被证明太慢了)。这是一个有趣的帖子,但对于每个查询半秒也太多了。

  2. 然后我们使用了 REDIS(见这篇文章),但过滤是这里的问题。我们对 TOP 5 和其余的使用单独的列表。TOP 5 立即更新,其余部分有 20-30 分钟的延迟。事实上,我们根据排行榜的缓存实例对这个用户进行了排名(尽管使用的是真实的 XP,而不是缓存的),所以这是可以接受的。在非 Top5 上实时不是先决条件。这对于一个全球排名来说很好,但如何根据月份和/或国家和/或年龄过滤结果。我们是否需要为每个过滤组合保留一个列表?

  3. 我们还在 Java 中测试了自定义结构(将其用作 Java 缓存服务器,在功能上与 REDIS 类似),仍在试验它。哪个是实现我们目标的最佳结构组合?我们最终为每个过滤组合使用一个列表,例如Map<FilteringCombination, SortedList<User>>,然后对特定键的列表进行二分搜索。这样,一个完成的游戏需要几次插入,比如 X,但它需要 X*NumOfPlayers 空间,这是保持单个列表的 X 倍(不确定这是否适合内存,但我们总是可以在这里创建一个集群将组合拆分到不同的服务器)。这里有一个关于如何在出现故障时重建缓存的问题,但这是我们可以处理的另一个问题。

  4. 扩展上述方法,如果我们在每个列表中定义评分桶,我们可能会稍微提高性能(例如,一个桶用于 0-100xp,另一个用于 101 - 1000xp,另一个用于 1001 - 10000xp 等)。分桶策略将基于我们游戏中玩家的 xp 分布。确实,这种分布在现实世界中是动态的,但我们已经看到,几个月后变化很小,请记住 XP 总是在增加,但新用户也在不断增加。

  5. 我们还通过使用聚类键和白行功能测试 Cassandra 的自然排序,尽管我们知道拥有数百万行可能并不容易处理。

总而言之,这就是我们需要实现的目标。如果某个用户(我们将其命名为 UserX)未包含在 Top5 列表中,我们需要将该用户的排名与周围的一些玩家(例如上 …

java database caching cassandra redis

6
推荐指数
1
解决办法
2918
查看次数