4

Java と DateTime の DB で最も有益なのはどれですか? (JodaTime を日付として使用)

(DateTime オブジェクト (Java) + TIMESTAMP (DB) ) VS (ミリ秒の長さ (Java) + BIGINT(DB)

基礎となるデータベースに裏打ちされた Java Web アプリケーションで DateTime 情報を使用するため

関心のある分野

  • Java での操作、処理、およびメモリ使用量
  • MySQL データベースの効率的なストレージ スペースを使用して節約する
  • BIGINT/TIMESTAMP 列を他の DB に簡単に移植できる
  • BIGINT/TIMESTAMP または 2 つの BIGINT/TIMESTAMP 間で DB を検索するのが容易

たとえば、開始と終了の DateTime を持つイベントがあったとします。DBでBIGINTを使用して日付のイベントを検索する方がTIMESTAMPSよりも高速ですか?

スケーラビリティと検索の問題が発生したため、基礎となる DB を交換する可能性があります。

DateTime を TIMESTAMP として MySQL DB に保存すると、Oracle などの別の DB に移植するときに問題が発生しますか?


現在、Java で Joda DateTime を使用し、その値のミリ秒を保存しています。

取得するときは、ミリ秒を DateTime オブジェクトに戻して表示します。

4

3 に答える 3

4

私は常に「1970 年からのミリ秒」アプローチを使用しています。この方法では、データベースの日付は常に UTC であるため、日付が属するタイムゾーンを気にする必要はありません。

于 2009-09-24T18:17:19.693 に答える
1

ここで実際に 2 つの質問があります。まず、Java で時間を表現するためにどの抽象化を使用する必要がありますか? Joda Time は、java.util.Date よりも確実に優れています。単純に long を使用するかどうか疑問に思っている場合 -- 日付の操作や比較を行う必要がある場合、それではうまくいかないと思います。それで、ジョーダタイム。

そして、MySQL でこれに TIMESTAMP を使用するのが間違いなく最適です。これは、ストレージに関してはほぼ同じであり、列で日付関数を使用する場合、MySQL は値を日付として適切に処理するためです。JDBC ドライバーは、日付型にマップする必要があることも理解します。

必要に応じて、スキーマ内で日付として正しく表現されている日付型を別のデータベースに移植するのに苦労することは想像できません。日付型を bigint として扱う場合の問題は想像できますが、これはあまり正確ではありません。

したがって、ここで最も正しいタイプを選択するだけです。とにかく、あまり適していないタイプを選択しても、パフォーマンスが向上するとは思えません。

于 2009-09-25T03:41:58.953 に答える
0

もちろん、データで何をしたいかによって異なりますが、DB に保存するために、時間/日付 (それが何であれ) に DB のネイティブ型を使用することをお勧めします。これはデータベースの標準であり、DB のほとんどの日付/時刻関数はその形式のデータを想定しています。

MySQL に関する特記事項:

日付/時刻の値に TIMESTAMP を使用できますが、TIMESTAMP は 1970-01-01 より前の日付を記録できないことに注意してください。そのため、「現在」に近い日付 (作成日や変更日など) には問題ありませんが、生年月日などの歴史的な日付には適していません。したがって、過去の日付が必要ないことが完全に確実な場合にのみ、TIMESTAMP を使用してください。

于 2009-09-24T16:23:51.580 に答える