我正在努力寻找管理巨大关系游戏数据的最佳方法。
让我解释一下我的数据结构。
有三个主要数据字段。用户,投注和优惠券。
+----------------------------------------------------+
| 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我尝试过;
方法2我尝试过;
敲定投注;是或否
使用cron任务检查相关优惠券。
我喜欢这两种方法,但我希望用户立即看到他们的进度,所以我不确定cron方法。这两种方法都运行良好,但我怀疑当有成千上万的用户会发生什么。
我希望我说我的问题可以理解。我正在寻找意见和建议。
感谢。
答案 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>');