【问题标题】:Derby/JavaDB: TIMESTAMP and BIGINT data types - which is better to store the date?Derby/JavaDB:TIMESTAMP 和 BIGINT 数据类型——存储日期哪个更好?
【发布时间】:2014-03-08 20:21:18
【问题描述】:

我有点困惑 - 我想将日期存储在 JavaDB/Derby 数据库中,但哪种数据类型更好用?

我可以像System.currentTimeMillis() 一样简单地存储Long 并将其以BIGINT 格式保存到数据库中。以后我可以随意格式化。

或者我可以使用TIMESTAMP 数据类型将其存储为TIMESTAMP('1962-09-23 03:23:34.234')

哪种方式效率更高?

【问题讨论】:

  • 在你的程序中什么对你来说更容易?即,这将减少您将其格式化为程序可用字符串的工作量?我不会担心数据库方面,现代数据库非常聪明,并且大部分都会自己照顾。当然,除非您认为这是您程序中的瓶颈。顺便说一句,您可能想查看 H2 数据库,它非常快,可移植,并且是用纯 Java 编写的。恕我直言,它比德比要好得多。
  • 寻找一个真正的timestamp 列,这是确保只存储有效日期的最佳方式。您无法通过 bigint 列来确保这一点。顺便说一句:我更喜欢 HSQLDB 而不是 Derby 或 H2
  • 该应用程序不需要大量的 SQL 操作,所以我选择 JavaDB 作为商业项目的免费。在这种情况下,我更喜欢BIGINT,因为我只需要检查/计算时间差。谢谢。
  • 最大的问题是。您打算如何使用存储的值?根据您的业务需求,它的范围可以从简单的数字类型一直到 UTC 时间 + 时区名称(如 CHAR / VARCHAR 列)+ 实际偏移量。

标签: java sql derby javadb


【解决方案1】:

TIMESTAMP data type 的文档和 implementation notes 的文档都说 Derby 使用 nanosecond 分辨率。这暗示了一个 64 位整数,但我不知道 Derby 的实现。如果您真的关心,请查看源代码。

您为什么使用 TIMESTAMP?数据库的工作是管理数据,所以让它吧。您不应该在没有非常重要的原因的情况下尝试对数据类型进行 jerry-rig。对“效率”的模糊关注是微观管理数据库服务器的工作。

此外,您的问题含糊不清。 “效率”是什么意思?存储空间更少?内存中使用的空间更少?索引的优势?更快的查询?更快的写入?但是,在您确定特定的瓶颈之前,这​​些问题仍然是premature optimization(一件坏事)。

将日期时间值存储在日期时间数据类型中是有好处的,否则该数据类型不会被添加到数据库的库中。按预期使用 TIMESTAMP 的一个重要好处是它知道如何将字符串解析为日期时间值。

【讨论】:

    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2014-12-17
    • 2020-09-07
    • 1970-01-01
    相关资源
    最近更新 更多