我正在开发一个大型应用程序,它将包含一些包含大型数据集的表。 (可能1M +行)。该应用程序将是一个游戏,多个用户同时完成任务,并且数据密集。
在此应用程序中,将汇总用户统计数据。我想出了两个场景来实现计算所有统计数据所需的效果。
情景1
维护一个单独的表来计算用户统计信息。处理移动的意义,该字段将增加一个。
Table Statistics (Moves, Origins, Points)
$Moves++;
$Origins++
$Points = $Points + $Points;
场景2
根据需要对所有数据进行计数和求和。
Table Moves (Points, Origins)
SUM(Points)
SUM(Origins)
COUNT(Moves)
我的问题是,这两种方案中哪一种对数据库驱动程序最有效。我相信场景2可能更有效率,因为数据操作会少得多,但我不确定这些查询可能会对数据库造成的负载。
我正在使用MySQL 5.5 InnoDB和UTF8 Charset
答案 0 :(得分:1)
最佳路线取决于读取频率与点数,起点和移动的写入次数。反过来,这些频率将取决于用例,代码风格和缓存的使用(或缺乏)。
如果没有更多详细信息,很难提供合格的意见,但请考虑这样一个事实:专用表会为每个操作带来额外的写入方式带来一些额外的复杂性,并确保这些数据必须始终正确(匹配)基础细节数据)。鉴于在关系数据库中存储逻辑数据元素一次而不是两次的额外复杂性通常是最好的行动方案。
如果您担心性能和可扩展性,您可能需要考虑使用Mongo或DynamoDB等数据库平台的非关系方法。