cari

Rumah  >  Soal Jawab  >  teks badan

Mysql - PHP memasukkan 100,000 keping kandungan dalam kelompok, menyebabkan memori pecah kepada 128MB Bagaimana untuk menanganinya?

Oleh kerana terdapat reka bentuk perniagaan yang menjana rekod dalam kelompok dan menjana 100,000 keping kandungan pada satu masa (kebanyakan kandungan adalah sama, dan beberapa medan perlu menjana kod rawak), apa yang perlu dilakukan

PHPzPHPz2727 hari yang lalu916

membalas semua(3)saya akan balas

  • ringa_lee

    ringa_lee2017-06-05 11:09:07

    Mereka yang bercakap tentang menggunakan asynchronous dan looping, saya secara peribadi berpendapat ia adalah tidak munasabah
    Dengan 100,000 keping data, walaupun memori anda cukup besar, ia akan mengambil banyak masa untuk menyimpan data dalam pangkalan data (aliran IO). , dan walaupun penyerahan transaksi tidak diproses dengan baik, pangkalan data akan menduduki memori.

    Cara terpantas ialah menjana data terus dalam pangkalan data
    Jana sendiri jadual id (hanya satu medan id disimpan) dan rekod 100,000 entri (0-10w)
    Kaedah Mysql:

    insert into table t
    select i.id, concat('名字', i.id) name, 
        concat('随机生成码7-12:',FLOOR(7 + (RAND() * 6))) rand,
        ifnull(a.nickname, 'No nickname') nickname,
        uuid() descript, --随机字符串
        from_unixtime(unix_timestamp("20170101000000")+FLOOR((RAND()*60*60*24*365)))  --2017年中随机日期
    from table_id i
    left join table_account a on a.id=FLOOR((RAND()*12)) --如果数据来源另外一些表
    where i.id < 1000  --如果只要生成1000条

    balas
    0
  • 天蓬老师

    天蓬老师2017-06-05 11:09:07

    Saya benar-benar tidak mahu memprosesnya secara berkelompok, ini_set(''memory_limit', '256M');? Atau jika memori pelayan anda tidak ketat, tetapkan ia kepada 512J

    balas
    0
  • 天蓬老师

    天蓬老师2017-06-05 11:09:07

    1. Jika data yang dijana disimpan dalam struktur rantai, adalah disyorkan untuk mengoptimumkan struktur data Jika kebanyakan data adalah sama, anda boleh menggunakan nilai utama untuk menyimpan data yang sama, dan kemudian menggunakan sub-. nilai utama untuk menyimpan data yang berbeza (iaitu mencari titik persamaan sambil menempah perbezaan)
    Seperti
    array (0=>array('data'=>array('name'=>'t','age' =>'14),'key'=>array('1','2' ,'3','4')));
    foreach($array as $val) {

    foreach($val['key']=>$kval) {
        var_dump($kval);
        var_dump($val);
    }

    }

    2. Menyimpan 10 keping data pada satu masa akan memberi lebih tekanan pada pelayan MySQL Adalah disyorkan untuk mengoptimumkan kod sisipan, seperti
    masukkan ke dalam nilai jadual('t','a',1),('. t','a',2)

    3 Adalah disyorkan untuk membuka transaksi dan menyerahkan data secara kuantitatif

    balas
    0
  • Batalbalas