将大文件处理为变量

时间:2014-04-29 19:20:06

标签: php mysql sql arrays

我写了一个上传工具,用户可以上传需要在我们端处理的数千行。流程图如下:

  1. 上传
  2. 读取PHP临时文件并构建多维嵌套数组

    2.a纯数组数组[key] [key2] [key3] = row [](最多10个属性)

    OR

    2.b当前解决方案序列化数据数组[key] [key2] [key3] = json_encode(row [])

  3. 将上传的数据与MySQL上的数据进行比较
  4. 更新或插入。
  5. 很少有笔记 我需要创建一个嵌套数组来通过块来查看数据,我无法查询我们的数据库150,000次。我按特定类别汇总上传的数据,然后查询数据库。

    我已经尝试过使用带有空白嵌套数组的tmp文件。 此外,订购文件已被删除,因为它需要相同的处理量。

    以下是具有150,000行数据的文件的内存测试。 我首先尝试将其全部加载到内存中。 然后我尝试以处理时间为代价来序列化它。

    然后我尝试了HHVM。

        /*
                  Line Number   Memory In MB
    
        mem usage at # 10000 -     103.6
    
        */
    
    
        php memtest.php
        mem usage 0.6
        mem usage at # 0 - 0.7  //Memory used in MB get_memory_usage()
        mem usage at # 10000 -  103.6
        mem usage at # 20000 -  206.2
        mem usage at # 30000 -  308.7
        mem usage at # 40000 -  411.1
        mem usage at # 50000 -  513.4
        mem usage at # 60000 -  615.7
        mem usage at # 70000 -  718.1
        mem usage at # 80000 -  820.4
        mem usage at # 90000 -  922.5
        mem usage at # 100000 - 1024.6
        mem usage at # 110000 - 1126.7
        mem usage at # 120000 - 1228.7
        mem usage at # 130000 - 1330.9
        mem usage at # 140000 - 1434.1
        mem usage at # 150000 - 1537.2
        19.02784705162
    
        serialize
        mem usage 0.7
        mem usage at # 0 - 0.7
        mem usage at # 10000 -  8.3
        mem usage at # 20000 -  15.8
        mem usage at # 30000 -  23.2
        mem usage at # 40000 -  30.5
        mem usage at # 50000 -  37.7
        mem usage at # 60000 -  44.8
        mem usage at # 70000 -  51.9
        mem usage at # 80000 -  59
        mem usage at # 90000 -  65.9
        mem usage at # 100000 - 73
        mem usage at # 110000 - 80
        mem usage at # 120000 - 87
        mem usage at # 130000 - 94.1
        mem usage at # 140000 - 101.9
        mem usage at # 150000 - 109.7
        24.386758089066
    
        hhvm memtest.php 
        mem usage 2  
        mem usage at # 0 - 2
        mem usage at # 10000 -  28
        mem usage at # 20000 -  56
        mem usage at # 30000 -  82
        mem usage at # 40000 -  108
        mem usage at # 50000 -  136
        mem usage at # 60000 -  162
        mem usage at # 70000 -  190
        mem usage at # 80000 -  216
        mem usage at # 90000 -  244
        mem usage at # 100000 - 270
        mem usage at # 110000 - 296
        mem usage at # 120000 - 324
        mem usage at # 130000 - 350
        mem usage at # 140000 - 378
        mem usage at # 150000 - 406
        4.0886609554291
    
        serialize
        mem usage 422      (422-406=16m)
        mem usage at # 0 - 422      // 16
        mem usage at # 10000 - 430  // 28
        mem usage at # 20000 - 438  // 36
        mem usage at # 30000 - 446  // 44
        mem usage at # 40000 - 452  // 50
        mem usage at # 50000 - 460  // 58
        mem usage at # 60000 - 468  // 66
        mem usage at # 70000 - 476  // 74
        mem usage at # 80000 - 484  // 82
        mem usage at # 90000 - 492  // 90
        mem usage at # 100000 - 498 // 96
        mem usage at # 110000 - 506 // 104
        mem usage at # 120000 - 514 // 112
        mem usage at # 130000 - 522 // 120
        mem usage at # 140000 - 530 // 128
        mem usage at # 150000 - 538 // 136
    
        14.125330924988
    

    我的问题是在PHP中处理大型数据集的最佳方法是什么? 是否有更优化的方法将数据存储在变量中?

0 个答案:

没有答案