Mysql - PHP が 100,000 個のコンテンツをバッチで挿入すると、メモリが 128MB にバーストします。
PHPz
PHPz 2017-06-05 11:07:07
0
3
935

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

PHPz
PHPz

学习是最好的投资!

全員に返信(3)
左手右手慢动作

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

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

リーリー
いいねを押す +0
Peter_Zhu

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

いいねを押す +0
Peter_Zhu

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
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート