検索

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

PHP は非常に長いデータのメモリ制限問題を解決します

現在、一定のエリアをスキャンする複数のレーダー装置があり、スキャン後は約 140 万 ポイント (各ポイントに 4 つの属性が含まれる) のデータが返されます。
次に、レーダー デバイスはデータを , で区切られた文字列に結合します: "x1,y1,a1,p1,x2,y2,a2,p2....x1400000, y1400000,a1400000,p1400000"
この文字列のサイズは、100 メガバイト未満の数十メガバイトである必要があります。
PHP コードは次のように処理されます:

リーリー

メモリ消費量についてはあまり詳しくなく、これほど大量のデータを処理するのは初めてです。
レーダーから送信されるデータが 11W 個の点群のみの場合(3MB のデータ)、ここで正常に受信して処理できます
データが少し大きい場合は、プロンプトが表示されますメモリ制限は 128M
確認しましたインターネット上のいくつかのメソッドは、ほとんどが変更と呼ばれるものですphp.iniファイル内memory_limit=-1
しかし、変更後も送信できません
現在、Radar との話し合いでは、毎回最大 10W ポイントをグループ化し、さらにパラメータを 1 つ追加する この送信に残っているポイント数 を私に送信できるということです。 PHPがそれを受け取ると戻り値として渡され、折り返し電話して送信し続けますが、このように計算してみると、1セットのデータを送るのに合計14~15回の送信が必要となります。 ..実現可能性はまだ確実ではありません
開発中にこの問題に遭遇した際にどのように対処したか教えていただけますか?
オンラインで待機しています。 。 。

迷茫迷茫2739日前846

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

  • PHP中文网

    PHP中文网2017-05-27 17:44:31

    リーリー

    返事
    0
  • phpcn_u1582

    phpcn_u15822017-05-27 17:44:31

    質問: gzip は有効ですか? この種の純粋な JSON データは、有効化後の圧縮率が高くなります。メモリ制限を変更した後、ネットワーク接続がタイムアウトになる場合もあります。

    返事
    0
  • 滿天的星座

    滿天的星座2017-05-27 17:44:31

    1. Webサーバーが受信するボディには長さ制限があり、nginx-client_max_body_size

    2. など長すぎると受け付けられません。
    3. ウェブモードではバッチ送信の方が良いソリューションです

    4. より良い方法は、Webモードでのさまざまな制限がなく、より効率的なソケットバイナリ送信を使用することです

    返事
    0
  • 仅有的幸福

    仅有的幸福2017-05-27 17:44:31

    まず第一に、文字列を配列に変換すると、大量のメモリが消費されます。

    必要に応じて、最後のステップは、それを json に変換してファイルに保存することです。Json も文字列なので、文字列として直接処理してみてはいかがでしょうか。

    php7の場合、preg_replaceを使用できないため、それを処理するにはpreg_replace_callbackに切り替える必要があります

    リーリー

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-27 17:44:31

    メモリ制限を拡大し、投稿のデータ量を増やします。 。基本的には数百MB程度なら問題ありません

    返事
    0
  • キャンセル返事