【发布时间】:2012-07-28 16:35:47
【问题描述】:
我目前正在为客户编写一个赌博系统,实际上,该系统的工作方式如下:
- 票是我们创造的
- 每张票都会被分配一定数量的数字
- 共有 1,000,000 个,从 000,000 到 999,999 随机排序
- 这 100 万个号码被分成票,每张票的号码数量由管理员定义。
现在的问题是,现在我们有一个随机排序的 100 万个数字的数组,这很好,但是将其插入数据库的最佳方法是什么?
我们有两张桌子
门票
- 身份证
- ticketUID
- 奖品ID
- 添加日期
票号
- 身份证
- ticketID
- 号码
当用户决定将彩票添加到奖品中时,我们会循环并创建由每张彩票的总数决定的总彩票,例如每张票 1 个号码 = 100 万张票,等等……
现在我们循环检查每张票的总数,从我们的数字数组中添加多少,然后从原始数组中删除它,这样就没有重复的数字了。
现在问题出在哪里,这样会占用大量内存,并导致页面超时....
还有其他方法可以帮助解决这个问题吗?
附:我无法提供源代码,但这基本上就是我们正在做的事情,而我真正需要的是关于如何处理所有这些数据的插入的其他方法的理论。
提前致谢
【问题讨论】:
-
你的插入现在是什么样子的?必要时晦涩难懂,但看看你现在是如何做的很有用。
INSERT INTO tickeNumbers (ID, tickedtID) VALUES ('$tid', $currnum), ('$tid', $currnum), ('$tid', $currnum), (...)似乎并没有非常低效。 -
您好,是的,这就是为什么我需要建议,因为它似乎效率很低,但不确定我还能如何插入如此大量的数据,我们基本上循环并创建如上所述的许多票证循环遍历,但是需要在每张票中插入许多数字,这意味着如果每张票有一个数字,我们插入 100 万张票,然后插入 100 万个数字...
-
如果您或多或少地在 PHP 中循环执行数十万个单独的查询或其他任何事情...您认为效率低下发生在哪里?
-
我假设我们实际上添加它的方式,事实上它直接从一个表单运行,因为下面的绅士提到了一个很好的方法是将它分成一个单独的线程,所以这就是我要做的。
-
当然,您可以设置一个 cron 并将其卸载到其他地方。您必须小心不要假设它立即可用(并且 PHP 不是多线程的)。我最初的想法是写入文件并稍后处理文件,但首先,您需要知道哪里存在瓶颈。如果您正在循环、循环和循环并且仍然单独插入几十万个查询,是什么让您认为您不会在其他地方运行的脚本遇到超时?您需要知道实际问题是什么,而不仅仅是将其转移到其他地方。也记录任何输出。
标签: php mysql insert bulkinsert