このアプリケーションでは、管理者がレポートを表示できる UI にレポート モジュールがあります。管理者には、from_date と to_date を選択するオプションが与えられます。トランザクション中、ライブ データをいくつかのテーブルに保存します。これらはすべてコア テーブルとして使用できます。データは、UTC タイムゾーンでこれらのテーブルに保存されます。スケジューラを 30 分ごとに実行し、コア テーブルのデータを 1 日のトランザクション数、応答時間などのレポートに必要なものに変換します。管理者にとって、表示されるデータはブラウザのタイムゾーンに基づいている必要があります。管理者は複数のタイムゾーンに分散しています。データをどのように保存し、どのように取得するのですか? リクエストが送信されるたびに、値を計算することはできません。
2 に答える
トランザクションを UTC として保存することは問題なく、多くの場合、推奨される方法です。
TIMESTAMP WITH TIMEZONE
コメントで提案されているように使用して保存すると、トランザクション データに適用される現地時間とタイムゾーンを知ることができるという追加の利点があります。それも問題ありませんが、それはあなたが求めたものではありません。
あなたが言った:
管理者にとって、表示されるデータはブラウザのタイムゾーンに基づいている必要があります。
これは、データベースの時刻が UTC で設定されているか、タイム ゾーン付きのローカル タイムで設定されているかに関係なく、レポートを表示しているユーザーのタイム ゾーンへの出力時にデータを変換する必要があることを意味すると解釈します。
しかし、あなたは次のようにも言いました:
リクエストが送信されるたびに、値を計算することはできません。
そうですね、すべての視聴者が潜在的に異なるデータを持っている可能性があるので、申し訳ありませんが、それはまさにあなたがそれをしなければならない方法です. レポートを生成するアプリケーション ロジックが何であれ、データのタイムスタンプをビューアーの現地時間に変換する必要があります。これは通常、データベースでは行われませんが、中間層のアプリケーション ロジックで行われます。データベースに対して直接レポートを生成する場合、一部のレポート エンジンには、レポート自体に関連付けられたコードまたはスクリプトでタイムスタンプを操作する機能があります。
結果がどうであれ、これらのレポートのどこか (おそらくフッター) にタイム ゾーンが出力されていることを確認する必要があります。人間は、明らかに異なるタイムゾーンにいるスーパーバイザーや顧客などにレポートを電子メールで出力するなどのことを行うことがよくあります。