管理している Web サイトのLAMPスタックを使用しています。使用統計 (デスクトップ製品に関連するさまざまなもの) をまとめる必要があります。
私は最初、PHP でこの問題に取り組みました (既にデータを操作するためのクラスがたくさんあるためです)。5.3を使用していた私の開発ボックスではすべてうまくいきました。
簡単に言うと、5.1 のメモリ管理はかなりひどいようで、長期ロールアップ スクリプトを固定メモリ空間で実行するために、多くのばかげたことをしなければなりませんでした。私たちのサーバー担当者は、現時点では PHP をアップグレードするつもりはありません。その後、開発サーバーを 5.1 に戻したので、この問題に再び遭遇することはありません。
MySQL データベースのマイニングでさまざまな期間と解像度の統計をロールアップし、(cron スケジュールではなく) 将来にわたって常にこれを実行するプロセスを実行する可能性がある場合、どの言語を選択することをお勧めしますか? 私は Python (多かれ少なかれ知っている)、Java (あまりよく知らない)、または PHP (かなりよく知っている) でそれを突き出していました。
編集:コメンターのデザインの明確化
解決策: ロールアップ スクリプトが現在機能する方法は、解決策とバケットを定義するためのクラスがいくつかあることです。私は年、月、週、日を持っています - 「バケット番号」が与えられると、各クラスはそのバケットの時間範囲を定義する開始と終了のタイムスタンプを与えます - これは任意のエポック日付に基づいています。システムは「完全な」記録を維持します。つまり、現在、最後に実行されてから各解像度のロールアップされたデータセットを完成させます。
SQL Strat: 基本統計は、多くの異なるスキーマとテーブルにあります。ほとんどの場合、ロールアップされた統計ごとに個別のクエリを実行してから、挿入用に 1 つのレコードを入力します。次のようなネストされたサブクエリを提案しています。
roll_up_stats (someval、someval、someval、...) に INSERT (someschema から SUM(somestat) を選択、someschema2 から AVG(somestat2) を選択)
これらのサブクエリは一時テーブルを生成しますよね? 私の経験では、過去に糖蜜のように遅かったです。それはより良いアプローチですか?
編集 2: 質問にいくつかのインライン応答を追加する
5.1 php の場合、言語がボトルネックでした -- 基本的に、言語の選択が間違っていると言われました (スクリプトは 5.3 では問題なく動作しましたが)。あなたは、私がこのタスクのためにチェックアウトしているpythonについて言及しています。明確にするために、私がやっていることは、デスクトップ製品の使用統計の管理ツールを提供することです (ログは実際には EJB サーバーによって mysql テーブルに書き込まれます)。私は apache ログ ファイルの分析と、Web 側でより多くのカスタム Web レポートを行っていますが、このプロジェクトは別です。私がこれまでに取ったアプローチは集計テーブルです。これらのメッセージ キュー製品で何ができるかわかりませんが、調べてみます。
さらに言えば、データは、サービスおよび顧客レベルで経時的なアクティビティをグラフ化するために使用され、管理者が製品がどのように使用されているかを理解できるようにします。期間 (4 月 1 日から 4 月 10 日まで) を選択し、選択した期間に応じて、特定の機能の合計使用時間 (時間、日、月など) のグラフを取得できます。その本質的には、使用状況の事後分析です。ただし、必要性はリアルタイムに向かっているようです (最後の 1 時間の使用状況を見てください)。