PHP は非常に長いデータのメモリ制限問題を解決します
迷茫
迷茫 2017-05-27 17:42:31
0
5
817

現在、一定のエリアをスキャンする複数のレーダー装置があり、スキャン後は約 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回の送信が必要となります。 ..実現可能性はまだ確実ではありません
開発中にこの問題に遭遇した際にどのように対処したか教えていただけますか?
オンラインで待機しています。 。 。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(5)
Ty80

リーリー

いいねを押す +0
phpcn_u1582

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

いいねを押す +0
滿天的星座
  1. Webサーバーが受信するボディには長さ制限があり、nginx-client_max_body_size

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

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

いいねを押す +0
仅有的幸福

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

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

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

リーリー
いいねを押す +0
伊谢尔伦

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!