2016-09-28 11 views
0

APIから、次の240時間の天気予報データを100の都市に対して取得するPHPプログラムがあります(合計24,000レコード、保存します1つのテーブルに)。プログラムは、すべての都市と毎時、気温、湿度、降水確率、スカイカバーと風速を取得します。このデータはJSON形式であり、すべてをデータベース、好ましくはmySQLに格納する必要があります。この作業は、すべての都市で1回だけ実行する必要があります。JSONオブジェクトの値を使用してDBテーブルを一括更新する

10分ごとに値を更新したいので、パフォーマンスは非常に重要です。誰かが私のテーブルをJSONの値でもっとも効率的に更新する方法を教えてくれれば、大きな助けになるでしょう。

これまでのところ、私は以下の戦略を試しました。
1)JSONをデコードして準備済みの文でループを使用して、各値を一度に更新するのが遅すぎます。
2)ストアドプロシージャを使用する{プロシージャにJSONオブジェクト全体を渡す方法がわからず、渡すことのできる個々のパラメータの数が限られていることがわかっています}
3)LOAD DATA INFILEを使用してください(csvファイルの生成が遅すぎます)。
4)CASEでUPDATEを使用して、sqlを動的に生成します(文字列が長すぎて実行が遅すぎます)。

必要に応じて追加情報をお知らせいたします。

+1

私はこのAPIは、このようなトラフィックをブロックすることを100%確信しています。 –

+0

申し訳ありませんが、導入時に私は物事を少し簡略化しましたが、それは私の質問のポイントではありません。私はjsonオブジェクトを持っており、それをDBに入れたいと思っています。 –

答えて

0

約1ダースの列のテーブルが1つありますか? 10分ごとに100行を挿入する必要がありますか?

のように100行を挿入すると、少し難題になります。 SQLコードを表示してください。何かが悲惨に間違っていなければなりません。あなたのオプションのどれが数秒以上かかるか想像できません。 「数秒」が遅すぎますか?

テーブルには100行しかありませんか?そして10分ごとに100の更新を発行していますか?それでも、汗はありません。

技術を再構築します。

実用的な場合は、私は新しいデータで新しいテーブルを構築するだろうし、テーブルを入れ替える:

CREATE TABLE new LIKE real; 
Load the data (LOAD DATA INFILE is good if you have a .csv) 
RENAME TABLE real TO old, new TO real; 
DROP TABLE old; 

ダウンタイムはありません - realが常に利用可能であるが、どのくらいの時間がかかるかは関係ありません。

(大規模なアップデートを行うと、データベース内のより多くの「努力」である;。リロードが速くなければなりません)

+0

私の間違い、申し訳ありません。私は24.000の行を持っていると私は10分ごとにそれらのすべてを更新したい。 あなたは正しいですが、私のコードは間違っていました。私はそれを書き直しました。そして今、クエリはすべてのテーブルに対して〜5秒かかります。 しかし、テーブルのすべての行を更新する必要があるので、新しいテーブルを作成することに興味があります。どう思いますか?その場合、私は何をすべきですか?テーブルを作成し、データを更新する代わりに挿入して、テーブルの名前を変更します。 ありがとうございます。 –

+0

私は私の答えを増やしました。 –

関連する問題