7

HRV や ECG などの大量の生体認証データが保存されている Oracle データベースがあります。各ユーザーのこのデータを Excel シートに表示する必要があります。しかし、このデータは非常に大きく、1 人のユーザーでも 1,00,000 を超えるレコードを取得しています。現在100~の利用者がいます。

私がやっていることは次のとおりです。

  1. Zendフレームワークで開発した同じコマンドラインを使用してCRONジョブを実行します。
  2. この CRON が重複しないようにします。
  3. 各ユーザーのOracleデータベースからすべてのデータを1つずつ取得し、これを配列に保存します。
  4. すべてのユーザーのデータを取得したら、phpexcelライブラリを使用して Excel シートを生成しています。

    Excelシートの構造

    • uid 1/ uid/2 uid/3 ----------- nth
    • データ |データ |データ |
    • データ |データ |データ |
    • | |
    • n番目

問題 :

PHP は 1.5 GB の RAM を使用し、データを配列に格納し、それを関数に送信して phpexcel とやり取りしますが、このライブラリには 3 ~ 4 時間かかり、「Fatal : Memory limit」エラーが発生します。私のシステムには 2 GB の RAM しかありません。

このサイズのデータ​​を処理し、同じ情報を Excel 形式で表示するようにコードを最適化するには、どのような手順を実行する必要がありますか、または RAM を増やす必要がありますか?

4

2 に答える 2

7

PHP のみを使用して、結果データを含む何らかの種類の Excel で読み取り可能な区切りファイル (CSV) を追い出すことを検討してください。(これは、経験している制限のため、PHP 経由で Excel に書き込むことはないという考えです)。

Powershell などを介してその php 生成ファイルを要求し、Powershell またはその他のスクリプトを選択して、csv ファイルを直接 Excel で開き、xlsx として保存することができます。

または、コマンド ライン php で「システム」呼び出しを実行し、csv を直接 Excel で開き、それを xlsx として保存するスクリプト ステップを実行することもできます。

于 2012-12-22T04:33:11.120 に答える
2

単一のユーザー データが巨大な場合、このデータを保持するために大量のメモリを使用しているため、バッチ モードで Excel に書き込んでみてください。メモリ使用量を節約します。

于 2012-12-22T04:34:23.020 に答える