2016-07-13 8 views
0

json形式で予測値をクライアントに返すPHPアプリケーションがあります。私は変数にさらにを集めているので、すべてのデータを保持しています。膨大なデータセットを変数に格納する(メモリエージャーエラー)

クライアントが短期間に値を要求した場合、人生は良好であり、彼は要求したことを得る。問題は、彼が1年以上の予測を要求したときです。変数に格納されているデータセットが膨大であるため、メモリエラーが表示されます。

私はメモリを拡張したくない、私はそれをやり遂げる代わりの方法で考えている。

私はメモリマップファイルに出くわしました。それは良い解決策ですか、あるいは他のものを考えることができますか?ありがとうございました!

私はgearmanを使用し、ワーカーによって取り出された各データに対して、値を持つ新しい配列が予測変数に追加されます。

すべてが完了したら、私はクライアントに返します。

public function requestCompleteApi(\GearmanTask $task) 
{        
    $this->forecast[] = unserialize($task->data()); 
} 
+1

のような、よりコンパクトな形式は助けにはなりません。(5.5以降PHPに)PHP Generators

  • を発電機を使用することができます生データを保持しているメモリが足りなくなった場合、json文字列が構築されている間は、メモリが不足していることになります。 jsonはxmlなどのように "膨れた"ものではありませんが、平均配列はデータの生のバイトサイズよりもjson文字列として多くのスペースを占有します。 –

  • +0

    クライアントはそのデータを保存するか、または表示するだけですか?それが表示されているだけであれば、ページごとに約50の結果が表示されます。 – vlatkozelka

    +0

    はい、クライアントはデータを別の場所で処理する必要があります。 –

    答えて

    0

    だから、非常に曖昧な質問ですが、私は助けようとします。

    私はいくつかのsugastesを持っている:

    1. は、使用PHP 7を試してみてください - それは変数を格納するために、より少ないメモリを使用します。
    2. 大きな配列を使用する場合は、アプリケーションを再フォーマットしてみてください。たぶん、あなたは多分JSONないようにしてください場合は、少ないメモリを使用することができますが、ProtoBufまたはApache Thrift
    +0

    Gearmanを使用していますが、php 7ではサポートされていません。今のところphp 7はオプションではありません。 PHP GeneratorsとApache Thriftはどちらも有望です!私はそれを徹底的に調べます!ありがとう! –

    +0

    Gearmanについて - Net Gearman [link] https://github.com/Publero/net_gearmanでも見てください。PHP拡張は必要ありません。 PHP 7の使用に役立つかもしれません。 – Lakremon

    関連する問題