Derzeit gibt es mehrere Radargeräte, die einen bestimmten Bereich scannen. Nach dem Scannen werden Daten von etwa1,4 MillionenPunkten (jeder Punkt enthält 4 Attribute) zurückgegeben.
Dann fügt das Radargerät die Daten zu,
分隔的字符串:"x1,y1,a1,p1,x2,y2,a2,p2......x1400000,y1400000,a1400000,p1400000"
zusammen. Die Größe dieser Zeichenfolge sollte Dutzende Megabyte betragen, weniger als 100 Megabyte.
Der PHP-Code wird folgendermaßen verarbeitet:
$num=$_POST['num'];//点的总数量 $str=$_POST['str'];//点的4个属性组成的字符串 $str_arr=expload(',',$str);//将字符串转换为数组 //将数组转换成json字符串 $point=array(); for($n=1;$n<=$num;$n++){ $x=$str_arr[$n*4-4]; $y=$str_arr[$n*4-3]; $a=$str_arr[$n*4-2]; $p=$str_arr[$n*4-1]; $point[]=array("x"=>$x,"y"=>$y,"a"=>$a,"$p"=>$p); } $json_str=json_encode($point); //将json字符串保存在".txt"文件中 $handle=fopen("./1.txt","w"); fwrite($handle, $json_str); fclose($handle); //返回请求成功信息 echo "ask=1&cmd=3"; exit;
Ich weiß nicht viel über den Speicherverbrauch und dies ist das erste Mal, dass ich eine so große Datenmenge verarbeite.
Wenn die vom Radar übertragenen Daten nur11WGruppenpunkte (ungefähr3MBDaten) sind, kann ich das erfolgreich empfangen und verarbeiten
Wenn die Daten etwas größer sind, wird eine Meldung angezeigt: „Das Speicherlimit beträgt 128 Mio.“Ich habe einige Methoden im Internet überprüft. Bei den meisten handelt es sich um die Änderung vonmemory_limit=-1
php.ini
-Datei.
Aber nach der Änderung kann sie immer noch nicht übertragen werdenphp.ini
文件中memory_limit=-1
可是改了之后仍然无法传输
目前跟雷达端商量的是他每次最多给我传10W组点,然后再多个一个参数本次传输还剩多少点
Die aktuelle Diskussion mit dem Radarterminal ist, dass er mir jedes Mal maximal
10W
Gruppenpunkte senden kann , und fügen Sie dann einen weiteren Parameter hinzuWie viele Punkte sind in dieser Übertragung übrig
, nachdem PHP es empfangen hat, wird es ihm als Rückgabewert übergeben, und er ruft zurück und sendet es weiterhin an mich . Auf diese Weise berechnet werden jedoch insgesamt 14 bis 15 Übertragungen erforderlich sein, um einen Datensatz zu senden ... und die Machbarkeit ist noch nicht sicher
题主 gzip 开启了没? 这种纯 JSON 数据,开启了以后压缩率很高的。改大了内存限制以后,网络连接也可能会超时的。
web服务器接收Body有长度限制,超长不能接收, 比如nginx-client_max_body_size
web模式下采用分批传输是比较好的方案
更好的方式是用socket二进制传输, 没有web模式下的各种限制, 效率较高
首先你这字符串占用内存就很大了,你再转换为数组处理占用内存会非常大的。
看你的需求,最后是转换为json存到文件,json也是字符串,为何不直接字符串处理呢。
如果是php7的话不能使用preg_replace,需要换成preg_replace_callback来处理
内存限制开大,还有post的数据量也开大就可以了。。基本上几百兆处理起来是没问题的