Mysql - PHP insère 100 000 éléments de contenu par lots, provoquant une explosion de la mémoire jusqu'à 128 Mo. Comment y faire face ?
PHPz
PHPz 2017-06-05 11:07:07
0
3
914

Étant donné qu'il existe une conception commerciale qui génère des enregistrements par lots et génère 100 000 éléments de contenu à la fois (la plupart du contenu est le même et certains champs doivent générer des codes aléatoires), que faut-il faire ?

PHPz
PHPz

学习是最好的投资!

répondre à tous(3)
左手右手慢动作

Ceux qui parlent d'utilisation de l'asynchrone et du bouclage pensent personnellement que c'est déraisonnable
Avec 100 000 données, même si votre mémoire est suffisamment grande, il faudra beaucoup de temps pour stocker les données dans le fichier. base de données (flux IO), même si la transaction Si la soumission n'est pas bien traitée, la base de données occupera également de la mémoire

.

Le moyen le plus rapide est de générer des données directement dans la base de données.
Générez vous-même une table d'identifiant (un seul champ d'identifiant est stocké), enregistrez 100 000 entrées (0-10w)
méthode 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

Je ne veux vraiment pas le traiter par lots, ini_set(''memory_limit', '256M');? Ou si la mémoire de votre serveur n'est pas limitée, réglez-la sur 512 M

Peter_Zhu

1. Si les données générées sont stockées dans une structure en chaîne, il est recommandé d'optimiser la structure des données. Si la plupart des données sont les mêmes, vous pouvez utiliser des valeurs clés pour enregistrer les mêmes données, puis utiliser des sous-données. valeurs clés pour enregistrer différentes données (c'est-à-dire rechercher un terrain d'entente tout en réservant les différences)
Tels que
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. Enregistrer 10 éléments de données à la fois exercera plus de pression sur le serveur MySQL. Il est recommandé d'optimiser le code d'insertion, tel que
insérer dans les valeurs de la table('t','a',1),('. t','a',2)

3. Il est recommandé d'ouvrir les transactions et de soumettre les données de manière quantitative

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal