gpt4 book ai didi

mysql - 将统计信息存储在数据库中还是在运行时计算它们?

转载 作者:行者123 更新时间:2023-11-29 01:59:09 25 4
gpt4 key购买 nike

我有一个应用程序,用户的事件将获得积分奖励。会有一个积分表,会为特定的 Action 分配一定数量的积分。

我的问题是哪种方法更好,最重要的是为什么?

方法 1:- 在 mysql 中创建一个 userPoints 表,并在每个用户操作时在其中插入点。当用户转到他们的个人资料时,查询数据库中的点数并显示它们。

示例:
用户购买商品
查询数据库:在用户2的userPoints中插入5个点
用户关注一个地方
查询数据库:在用户2的userPoints中插入7个点
用户出售他们的元素
查询数据库在用户 2 的 userPoints 中插入 -5points

方法 2:- 不要将点数存储在表中,而是计算用户已完成的 Action 数(从数据库中获取它们的数量和类型),然后在运行时乘以每种 Action 类型的一定数量的点数,无论何时积分是必需的(例如,当他们访问他们的个人资料时)

示例:
用户访问他们的个人资料以查看他们有多少积分
查询数据库,统计拥有的元素、跟随的地点、好友数,然后将元素数x5、关注数x7、好友数x10相乘并显示数字

史蒂文编辑:

让我直截了本地说,这是我应该采取的行动的时间顺序吗?我怎样才能收紧它并减少查询数量?

  • 购买商品的 actionId 为 1,奖励积分为 5(这在数据库的 - Action 表中指定)
  • Kylie(用户 ID:1)购买了一件商品。
  • 查询数据库:将项目添加到用户 ID1 的 userItems 表
  • 查询数据库:在 userActions 表中注册一个操作 - userId:1,actionId:1
  • 查询数据库 SET userPointsTotal = userPointsTotal + 奖励积分(将两个查询嵌套在一个查询中,如下所示:set userPointsTotal = userPointsTotal +(从 actuionid= 1 的操作中选择积分)
  • 查询数据库获取 userPointsTotal 并在 Kylie 的个人资料中显示值
  • 将来,引用表 userActions,以便用户可以根据特定类型的事件(社会地位或属性(property)状况)获得状态标题

最佳答案

您需要存储:

  1. Action - 列出 Action 和为每个 Action 定义的点的表格。这将充当您的域表。

  2. 用户操作 - 一个复合键表(user_id、action_id),列出用户完成的操作以及他们获得的分数(您需要将其存储在此处以防万一用户完成操作后,操作的点值会发生变化。您可以随时执行 SUM(user_actions.points) 以获得用户已获得的准确总点数。

  3. User Total - 枚举用户获得的总点数的值。您可以将其设为在记录用户操作时更新的 Users 表中的一列,或者这可以是存储在用户索引中的 user_actions.points 的总和,或者缓存在定期更新的某个地方(例如 Solr、Memcached)。这将使您能够显示大量聚合数据,而无需在每次显示用户列表时都使用昂贵的聚合函数冲击数据库。

这为您提供了世界上最好的。您有一个快速说明用户获得多少分的方法,一个在他们“偏离”时重新计算总数的可靠方法,以及一个用于引用完整性/附加信息的域表。

关于mysql - 将统计信息存储在数据库中还是在运行时计算它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19607017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com