検索

ホームページ  >  に質問  >  本文

Mysql - PHP が 100,000 個のコンテンツをバッチで挿入すると、メモリが 128MB にバーストします。

レコードをバッチで生成し、一度に 100,000 個のコンテンツを生成するビジネス設計があるため (コンテンツのほとんどは同じで、一部のフィールドはランダム コードを生成する必要があります)、何を行う必要がありますか?

PHPzPHPz2728日前918

全員に返信(3)返信します

  • ringa_lee

    ringa_lee2017-06-05 11:09:07

    非同期とかループとか言ってる人は、個人的には無理があると思う
    データが10万件もあれば、たとえメモリが十分に大きくてもデータベースにデータを格納する(IOフロー)のに時間がかかる。 、トランザクションの送信がうまく処理されなかったとしても、データベースはメモリを占有します。

    最も早い方法は、データベースに直接データを生成することです
    ID テーブルを自分で生成し (ID の 1 つのフィールドのみが保存されます)、100,000 のエントリ (0-10w) を記録します
    Mysql メソッド:

    リーリー

    返事
    0
  • 天蓬老师

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

    本当にバッチで処理したくないのですが、ini_set(''memory_limit', '256M');?または、サーバーのメモリが不足している場合は、512M に設定します

    返事
    0
  • 天蓬老师

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

    1. 生成されたデータがチェーン構造で保存されている場合、データのほとんどが同じである場合は、キー値を使用して同じデータを保存し、サブ異なるデータを保存するためのキー値 (つまり、相違点を保持しながら共通点を探す)
    など
    array (0=>array('data'=>array('name'=>'t','age') =>'14),'key'=>array('1','2' ,'3','4')));
    foreach($array as $val) {

    リーリー

    }

    2. 一度に 10 個のデータを保存すると、MySQL サーバーへの負荷が高くなります。
    insert into table names('t','a',1),(' などの挿入コードを最適化することをお勧めします。 t','a',2)

    3. 取引を開始し、データを定量的に送信することをお勧めします

    返事
    0
  • キャンセル返事