recherche

Maison  >  Questions et réponses  >  le corps du texte

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 ?

É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 ?

PHPzPHPz2731 Il y a quelques jours921

répondre à tous(3)je répondrai

  • ringa_lee

    ringa_lee2017-06-05 11:09:07

    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条

    répondre
    0
  • 天蓬老师

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

    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

    répondre
    0
  • 天蓬老师

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

    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

    répondre
    0
  • Annulerrépondre