最便宜的管理关系SQL数据的方法

时间:2016-01-07 18:48:59

标签: php mysql cron

我正在努力寻找管理巨大关系游戏数据的最佳方法。

让我解释一下我的数据结构。

有三个主要数据字段。用户,投注和优惠券。

+----------------------------------------------------+
|                     bets                           |
+----------------------------------------------------+
| id | status    | yes             | no              |
+----+-----------+-----------------+-----------------+
| 1  | 0         | 1.45            | 2.52            |
+----+-----------+-----------------+-----------------+
| 2  | 1         | 3.00            | 1.08            |
+----+-----------+-----------------+-----------------+                    
| 3  | 2         | 2.43            | 1.42            |
+----+-----------+-----------------+-----------------+

+----------------------------------------------------+
|                     coupons                        |
+----------------------------------------------------+
| id | played_by | bets            | status          |
+----+-----------+-----------------+-----------------+
| 1  | 1         |1,yes;2,no;3,yes;| 0               |
+----+-----------+-----------------+-----------------+
| 2  | 2         |2,yes;3,no;1,no; | 0               |
+----+-----------+-----------------+-----------------+                    
| 3  | 3         |1,yes;2,no;      | 0               |
+----+-----------+-----------------+-----------------+

信息:每次下注都有/无选择。用户下注。我们在优惠券内注册。如果所有赌注都在优惠券WIN中,优惠券获胜并且用户获得额外余额。经典。请注意,将有如此多的投注(每张优惠券平均5次),用户(数千)以及数千名用户播放的优惠券数量众多。

因此,我正在努力为最终确定投注并检查优惠券的输赢过程找到最佳方法。

方法1我尝试过;

  • 我们最终确定了赌注ID:2为是;
  • 检查2,是的;在优惠券中使用“LIKE”运算符,如果有,则将(追加)1添加到进度字段。
  • 检查优惠券内有多少投注。
  • 如果1s的数量等于此优惠券内的下注数量,请将优惠券状态设置为WON。

方法2我尝试过;

  • 敲定投注;是或否

  • 使用cron任务检查相关优惠券。

我喜欢这两种方法,但我希望用户立即看到他们的进度,所以我不确定cron方法。这两种方法都运行良好,但我怀疑当有成千上万的用户会发生什么。

我希望我说我的问题可以理解。我正在寻找意见和建议。

感谢。

1 个答案:

答案 0 :(得分:1)

不是将用户的赌注附加到优惠券中的值(由于您必须使用LIKE运算符而效率非常低),因此创建一个存储该优惠券的优惠券表会更有意义。与其关联的投注的ID,其所属的用户的ID以及优惠券的值(是或否)。因此,您的Coupon表格如下所示:

Coupons

ID  BetID   UserID  Value
1   1       10      YES
2   1       11      NO

现在,如果你想获得与Bet#1相关的所有优惠券,你只需要SELECT * FROM coupons WHERE BetID=1

如果下注#1获胜,您需要做的就是获取获胜选项的下注价值,并更新所有选择的用户。例如:

# Select the winning value:

SELECT <winning value>
FROM bets
WHERE id = <id of completed bet>;

# Update the users:

UPDATE users
SET balance = balance + <winning value>
WHERE id EXISTS (SELECT userID from coupons where betID = <id of completed bet> AND value='<winning value>');