私が働いている会社は、Blackberryプラットフォーム用のアプリケーションを作成しています。
私たちは、アプリケーション内にコードを埋め込み、実行されるたびにアプリケーションが中央サーバーにいくつかの統計を報告することを可能にする独自の「分析システム」に取り組んできました。現在、システムは正常に動作しています。ただし、ベータ版であり、1時間あたりのヒット数は100〜200です。「ヒット」は問題なくサーバーに送信されます。ヒットの受け入れと保存を処理するための非常に堅固なAPIを構築しました(MySQL DB内)。負荷をテストしたところ、1時間あたり数十万のヒットに問題なく対応できるはずです。それは実際には問題ではありません。
問題は統計を表示することです。Mint(haveamint.com)に似たディスプレイパネルを作成しました。これは、1時間ごと、過去数日、数か月、数週間、数年などのヒットを表示します。最初のバージョンでは、ヒットテーブルからデータを取得し、その場で解釈するストレートクエリを実行しました。それはあまり長くは機能しませんでした。現在の解決策は、ヒットを処理するために「キューに入れ」、5分ごとにcronを取得してヒットを取得し、時間、日、週、月、年などごとに「キャッシュ」に並べ替えることです。これは驚くほど機能し、信じられないほどスケーラブルです。ただし、1つのタイムゾーンでのみ機能します。会社全体がこれにアクセスできるため、さまざまなタイムゾーンで数百人のユーザーに対応しています。私が「今日」と定義するもの サンノゼでの私の同僚が今日と定義しているものとは大きく異なります。現在のソリューションは1つのタイムゾーンにしかキャッシュされないため、タイムゾーン外のデータをチェックする人にとっては悪夢です。
これを修正する現在の計画は、すべてのタイムゾーン(合計40)のキャッシュを作成することです。ただし、これは、データ量に40を掛けていることを意味します...これは私にとってひどいことであり、キャッシュが非常に大きくなる可能性があることを考えると、それを掛けることは悪い考えのように聞こえます。さらに、キューを処理する場合、40個の異なるキャッシュにキューを配置するのにさらに多くのCPU時間がかかります。
他の誰かがこの問題を解決する方法についてより良い考えを持っていますか?
(長い質問でごめんなさい。説明するのは簡単ではありません。ありがとうございました!)