1

我正在从在线游戏中挖掘比赛数据,其中每场比赛都是 5 对 5,每个玩家在比赛开始时选择一个独特的角色或英雄。

我的最终目标是使用频繁项集生成来确定哪些英雄组合最受欢迎,以及哪些组合可能更频繁地获胜。

我想要一个基于网络的应用程序,用户输入对方球队选择的英雄,以及你的球队当前选择的英雄并推荐英雄选择。这些英雄会在与对方球队选择的英雄的比赛中更频繁地出现。

我知道选择更频繁的英雄最终也会更频繁地出现在获胜游戏中,这就是为什么我可能会使用一个仅包含游戏模式中的英雄的交易数据库,其中英雄是为每个玩家随机选择的。

我有一个 MySQL 数据库,它有一个 Match 表、一个 Hero 表和一个 MatchHero 表,其中包含 (MatchId,HeroId) 的主键和该英雄是否获胜的布尔值。该表目前有大约 2600 万个条目。问题是获取数据可能需要 3 到 14 秒,具体取决于记录的数量(用户选择越少,获取的记录越多)。

什么是最好的设计,让我在获取数据和计算对于 Web 应用程序来说足够快的情况下实现这一点?将表存储在内存中?我不太担心实际的项目集生成算法,因为我已经在先验方面取得了不错的表现。是否可以预先计算与频繁项集生成相关的任何内容?谢谢你的帮助!

4

1 回答 1

0

使用索引来更快地访问数据。尽可能多地在数据库中进行数据分析,以避免将其复制到您的应用程序中。减少查询次数,改为使用存储过程和预准备语句。

确保您真正了解 Apriori。

如果您使用 SQL 查询计算每个项目集的支持,那么您做错了。对每个项目集长度使用 1 遍数据库;即所有 1 项集 1 遍,所有 2 项集 1 遍,所有 3 项集 1 遍。

Apriori 的基本思想并不难,但是很多人没有得到所有的细节,然后它变得比必要的慢得多。

于 2013-08-22T16:10:05.507 回答