Mysql – PHP fügt stapelweise 100.000 Inhalte ein, wodurch der Speicher auf 128 MB ansteigt. Wie gehe ich damit um?
PHPz
PHPz 2017-06-05 11:07:07
0
3
806

Da es ein Geschäftsdesign gibt, bei dem Datensätze stapelweise und 100.000 Inhalte gleichzeitig generiert werden (der größte Teil des Inhalts ist derselbe und einige Felder müssen Zufallscodes generieren), was muss getan werden

?
PHPz
PHPz

学习是最好的投资!

Antworte allen(3)
左手右手慢动作

那些说用异步,循环什么,个人觉得不合理.
10w条数据啊,你就算内存够大,数据存进数据库里也会占用很多时间(IO流),甚至如果事务提交没处理好数据库也会占用内存.

直接在数据库里直接生成数据才是最快的办法.
自己生成一张id表(只存id一个字段),记录10w条(0-10w)
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

实在不愿意分批处理,ini_set('’memory_limit', '256M'); 一下?或者你服务器内存不吃紧的话设成 512M

Peter_Zhu

1.假如生成的數據用鍊式結構保存,建議優化數據結構,如假如大部分數據相同可以用鍵值保存相同數據,跟住用子鍵值保存不同的數據(即求同存異)

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.一次性保存10條數據,對mysql服務器壓力加重,建議優化insert代碼,如
insert into table values('t','a',1),('t','a',2)

3.建議開啟事務,定量提交數據

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!