如何使用PHP / MySQL插入大量数据?

时间:2012-07-28 16:35:47

标签: php mysql insert bulkinsert

我目前正在为客户编写赌博系统,有效地说,系统的工作方式如下:

  • 门票是我们创造的
  • 每张票将被分配一定数量的票数
  • 总计1,000,000,从000,000到999,999
  • 随机排序
  • 这些100万个号码被分成票证,每个票证的数量由管理员定义。

现在问题是我们有一个随机排序的100万个数组的数组,这很好,但是将它插入数据库的最佳方法是什么?

我们有两张桌子

门票

  • ID
  • ticketUID
  • prizeID
  • addedDate

ticketNumbers

  • ID
  • ticketID

当用户决定将门票添加到奖品时,我们循环并创建总票数,该总票数由每张票的总数量确定,例如:每张票1张= 100万张票等......

现在我们循环检查每张票的总数,从我们的数组中添加多少,然后将其从原始数组中删除,这样就没有重复的数字了。

现在出现的问题是,这会以这种方式占用大量内存并导致页面超时....

是否有其他方式可以建议帮助克服这个问题?

P.S。我无法提供源代码,但这基本上就是我们正在做的事情,我真正需要的是其他方法的理论,我可以处理所有这些数据的插入。

提前致谢

2 个答案:

答案 0 :(得分:1)

我不是真正参与赌博,所以不确定这些门票与赌博有什么关系。

也就是说,如果你真的需要创建如此大量的数据,那么有一些选择。例如,您可以将创建故障单远离用户。我的意思是,每当用户决定“将门票添加到奖品”时,您将此任务委托给另一个进程/线程并让用户继续前进。然后,当完成票证的创建时,该过程以某种方式通知用户。

答案 1 :(得分:1)

我现在想不出最好的解决方案而不尝试其他东西 - 你真的必须首先将数字保存在数据库中吗?如果它的普通数字从000000到999999,那么你可以动态生成它们,这可能会更有效。

为了通常克服超时问题,您可以随时增加默认的php超时或完全禁用此特定任务:

//set php script timeout, 0 to disable 
set_time_limit(0); 

// your time consuming code 

//don't forget to reset to 30 seconds. 
set_time_limit(30);