WEBアプリのシステム日付について
どうでもいいことかもしれないが、WEBアプリにおいて、みなさんはシステム日付をどう扱っているのでしょうか?
たとえば、RDBMSがOracleの場合、データをインサートするときにシステム日付を格納したい場合に、sysdate を使うのでしょうか? それとも、アプリ側で new java.sql.Date() した値を格納しているのでしょうか?
つまり、アプリサーバのシステム日付を使うのか、DBサーバのシステム日付を使うのかということである。
ここでは話を簡単にするためにアプリサーバとDBサーバは別筐体であるがNTPなどで時刻の同期はされているものとする。ならばどっちでもいいじゃないかと言いたいところだけど、ルールを作るとして、である。
で。
アプリで取得したシステム日付を使う
メリットは、
- システム日付を取得するルーチンを決めておけば(勝手にnew Dateされないルールにしておけば)、そのルーチンを加工すると任意の日付を設定することができ、年度またぎのテストなどができる。
- たとえば100件インサートが走る場合、アプリ的には同じタイミングでインサートしたはずなんだけど、sysdate を使うと、1件目と100件目でことなるタイムスタンプが格納されることがある。これは要件しだいだけど。
デメリットは・・・。なんだろ。
new Date() しないでね、はルールだから、守らない人がでてくる。まあこれは論点がズレてるか。ルールが守られた上でのメリット・デメリットだからな。
DBサーバで取得したシステム日付を使う
メリットは、
- SQLが若干楽。
デメリットは、
- DB格納以外でシステム日付がほしいときに、select sysdate from dual; をするのか?
うーん、これだとアプリで設定するべき、ってなるのかな。
みなさんどうですか?