我有一个数据记录器,每秒存储传感器的读数,如下表所示:
16:21:53 10.51 19.47 16.89 16.4
16:21:53 4.44 8.03 6.86 6.33
16:21:53 1.99 2.18 2.42 1.28
16:21:54 1.41 0.72 2.39 1.28
16:21:54 1.06 1.85 2.99 2.08
16:21:54 1.04 2.27 3.27 2.29
16:21:56 1 2.46 3.07 2.34
16:21:56 1.13 2.26 3.24 2.07
16:21:56 0.93 2.05 2.84 1.81
16:21:57 0.99 1.88 2.61 1.63
16:21:57 0.85 1.61 2.44 1.35
16:21:57 0.7 1.4 2.26 1.14
16:21:58 0.63 1.27 2.34 0.99
存储所有这些行的日期很不方便,因为它会消耗大量内存空间,存储所有这些行的单个日期值的最佳方法是什么?我的观点是,不要有一个名为 datas 的新列并插入 25/2/2015 为 16:21:53 的行,另一个日期为 16:21:54 的行,依此类推,我想对所有行或任何其他有效的行使用 25/2/2015 1 次这样做的方法与一般数据库设计一样。
最佳答案
在 SQL Server 中,datetime
占用 8 个字节,但如果您不打算在 2079 年之后使用数据记录器,则可以使用仅占用 4 个字节的 smalldatetime
。
这比尝试用整数存储日期和时间要好,后者通常会导致使用超过 4 个字节,加上令人头疼的问题以及转换带来的 CPU 时间。我不知道其他dbms,但应该有类似的选项。
编辑:
我刚刚检查了 MySql,看起来您可以使用 timestamp
它可以同时保存日期和时间,并且它也存储在 4 个字节中。
在此处阅读有关存储要求和限制的信息:
MySql DateTime Storage Requirements
MySql date and time data types
另一个例子:
在 Oracle 11G 中,推荐的数据类型是date
。尽管它是可以存储数据的最小类型,但它仍然需要 7 个字节(timestamp
需要 12 个字节,但可以存储小数秒)。
Oracle Datetime data types
关于sql - 存储海量数据日期的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28712830/