Mysql - PHP memasukkan 100,000 keping kandungan dalam kelompok, menyebabkan memori pecah kepada 128MB Bagaimana untuk menanganinya?
PHPz
PHPz 2017-06-05 11:07:07
0
3
915

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

PHPz
PHPz

学习是最好的投资!

membalas semua(3)
左手右手慢动作

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条
Peter_Zhu

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

Peter_Zhu

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan