質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

10788閲覧

大量のJsonデータ受け渡しについて

KiichiroNomura

総合スコア8

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2018/02/15 08:59

サーバサイドに測定データがCSV形式で保存されており
これをPHPで作成したプログラムによりピックアップし
Json形式に変換後クライアントへ送り
クライアント側でjavascriptにより受け取り
テーブルを作成し、テーブルから選択したカラム毎にグラフを作成するアプリを作成しようとしております
PHP側の処理はjson_encodeを使いフォルダー内の全CSVファイルを一括して変換後送出
javascript側の処理はXNLHttpRequestを使いフォルダーを指定してjsonデータを受信するようにしております
フォルダー内にCSVファイルが1つの場合は正常に受信するのですが
フォルダー内にCSVファイルが複数存在する場合エラーとなります
どうやらデータの数が多すぎるとのメッセージが出てるようなのですが
大量のデータを受け渡す良き方法があればご教授ください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

サーバサイドに測定データがCSV形式で保存

ということはCSVの文字列データを全てPHPのメモリ空間へ保存しているわけですね。
からのパース、変数詰め込みでざっとメモリ消費量は2〜3倍になるでしょう。

PHPのメモリ制限やタイムアウト制限落ちている可能性が極めて高いです。
短期的にはphp.iniのこれらの値を調整することで対応できるでしょう。

しかし長期的な対応策を考えると、PHPだけでゴリ押しでCSV→JSON変換をするべきではありません。
MySQL等のデータベースで管理して、オフセット値等のやり取りをしながら複数回に分けてクライアントへ送信する仕組みを構築した方が良いかと思います。

ただまぁ、遅くて良いならob_flushのような機能を使って、CSVの例えば100レコードずつ読み込んで処理するメモリ消費量を温存するやり方もあります。
この場合json_encodeを使ってズドンという手法ではなく、妥当なJSONと思わしき文字列を手作業で作って出力していくような手法になるかと思います。


【追記】

PHP側の処理はjson_encodeを使いフォルダー内の全CSVファイルを一括して変換後送出

ん?そもそもなんでリクエストが来るまでCSVファイルはJSONファイルに出来ないんですか?
クライアントのリクエストを待たずにさっさとJSONにしてしまって、
後はApacheかなんかに任せてしまえば良いと思います。

バッチかなんかで新しいディレクトリが作られたら勝手に変換し始めるスクリプトを作って対応してみてはどうでしょうか?

投稿2018/02/15 09:29

編集2018/02/15 09:43
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KiichiroNomura

2018/02/16 07:32

別系統で測定器からのデータを日々FTPでサーバーにアップしている処理系が有り アップされたデータからその日の平均値を求める処理があるのですが ウェブアプリからデータの確認を行って不要なデーターを選んで削除する必要があり (測定機の誤動作等で明らかおかしなデータがたまに発生する為) なのでいったんグラフを表示して挙動のおかしなデータを指定してフィードバック 目視する為テーブルの表示とグラフの表示 表示した後にテーブルもしくはグラフから所定のデータを指定する必要がある為 このような処理系を考えましたが もっと簡単にできる方法があればご教授お願いいたします
miyabi-sun

2018/02/16 12:30

ちょっとひとまとめにすると重いので細分化して考えて行きましょうか。 > 別系統で測定器からのデータを日々FTPでサーバーにアップしている処理系が有り > アップされたデータからその日の平均値を求める処理があるのですが なるほど、これは質問からの想定通りという感じですね。 > ウェブアプリからデータの確認を行って不要なデーターを選んで削除する必要があり > (測定機の誤動作等で明らかおかしなデータがたまに発生する為) 目視ですか!?まぁ後で考えましょう。なるほど… > いったんグラフを表示して挙動のおかしなデータを指定してフィードバックしたい。 > テーブルやグラフで表紙、目視で不要データを削除したい。 この辺よくわからなかったので、私の方で文を拾ってつなぎ合わせました。合ってますか? 質問文と照らし合わせると、データの目視添削はJSONでクライアントに丸投げした後にブラウザ上で行いたいと言ってるわけですね?これも合ってますか? 以下、上記の文を私の解釈が合ってたとみなしながら考えていきます。 まず、FTPでアップロードされたCSVは、人が目視で必要・不要を判断するまで勝手に書き換わったりはしませんね? アップロードを検知する仕組みを構築してください。 Linuxの特定ディレクトリを監視する機能を利用しても良いですし、Cronかなにかで定期的に巡回しても良いでしょう。 新しいCSVが追加されたら、JSONファイルを作成するか、データベースへ登録してください。 同じCSVファイルを何度も保存しないような仕組みは設計次第なのでよしなに出来るようがんばってください。 ブラウザからの要求が出てきたら、JSONもしくはデータベースを元に高速なJSONの結果を返します。 これは回答欄に書いた手法と同じです。 ブラウザからの添削は、Ajaxによる指示書JSONファイルのアップロードという形ですね。 突合させて新しいJSONファイルを生成するなり、DBを更新するなりはおまかせします。 細部は色々工夫出来るかと思いますが、大まかにはこういった感じのやり方がスマートに解決出来るでしょう。
guest

0

全データが受け取れないなら、諦めて複数にわけてうけとって
クライアント側で結合するような処理になるのでは?
ただオーバーフローするような量のデータをクライアントでなにかしようとするのは
どうかと思いますけど。
集計をするにしても、データ抽出をするにしても、サーバー側でやることではないですか?

投稿2018/02/15 09:06

yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KiichiroNomura

2018/02/16 07:33

javascriptは触るの今回が初めてですので複数に分けて送る方法がよく分かりません どのようにすればよろしいでしょうか?
yambejp

2018/02/16 07:37

> 複数に分けて送る方法 それはjsonを提供しているAPI側の仕様なので、情報がなにもないので できるかどうかもわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問