【问题标题】:the best way to store dates for a huge data为大量数据存储日期的最佳方式
【发布时间】:2015-02-25 06:44:30
【问题描述】:

我有一个数据记录器,它每秒存储传感器的读数,如下表所示:

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 用于所有行或任何其他有效的时间作为一般数据库设计的方法。

【问题讨论】:

  • 通常此类数据存储在不同的文件或表中,即每天或每小时/分钟的新文件
  • @Lashane nooooo!这是一个糟糕的主意。
  • @SalmanA 是的,许多日志框架都使用了这个糟糕的想法
  • 你真正得到的是在这个表中创建一个指向日历表的外键。您仍然需要在每一行上定义外键。
  • 增加复杂性并不能提高效率。我认为您正在尝试解决一个不存在的问题

标签: sql database database-design


【解决方案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 dbms 使用 more 超过 8 个字节作为时间戳。我认为除了 SQL Server 之外没有很多(任何?)支持 4 字节时间戳,但我很确定 OP 使用实际时间戳会更好,无论它们的长度如何。
【解决方案2】:

您可以使用多种技术和各种打包解决方案来处理时间序列传感器数据。查看 Process Historian 和 SCADA 解决方案、流式数据库和复杂事件处理 (CEP) 软件。如果您想了解一些可以自己实施的技术,还有大量已发表的关于这些主题的科学和数据管理理论材料。

【讨论】:

    【解决方案3】:

    没有“标准”方法可以做到这一点。此外,这在技术上是不可能的,因为数据库表行没有固有的“顺序”。您的方案将取决于重建日期+时间的顺序。

    在插入时“汇总”每个 1 分钟期间的数据(最大值、最小值、平均值等)并将其存储在更短的时间(1/60 行)中是否可行,但稍微宽一些(更多列)表格?

    或者,保留最后一小时传感器读数的详细信息,但之后按上述方式进行总结?

    【讨论】:

    • 感谢@Rick James 的回复,实际上它是洗衣机 RMS 电流配置文件的数据记录器,并且需要每个值,因此我无法使用单个值作为平均值或其他值来表示数据
    猜你喜欢
    • 2012-10-18
    • 2011-11-26
    • 2023-04-08
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    相关资源
    最近更新 更多