我有一个存储各种仪器的温度记录数据的数据库。数据可以每分钟记录一次。设计日志表的一种方法是将每个日志条目与设备ID,时间戳和序列号一起放在自己的行中(即使设备上的时钟发生更改,也应该可以对条目进行排序)按实际测量的顺序)。然而,这似乎非常低效,因为除了系统为索引添加的任何内容之外,每个16位测量都可能附加16字节的其他数据。我认识到尝试优化数据库中的每个最后一个字节通常是毫无意义的,但是将数据扩展9:1或更差似乎是愚蠢的。
目前,我将记录聚合成等间距读数的组,并以可变长度不透明二进制格式存储每个记录一组,以及第一次读取的设备ID,时间戳和序列号,以及间隔读数之间。这很好用,而且我所知道的可能是最好的方法,但它不允许查询方式。
在没有过多冗余的情况下,是否有任何处理此类数据集的好方法?
答案 0 :(得分:8)
您的数据不会扩展9倍。您的数据大致保持不变,因为您没有开始的16位测量。您的测量值是特定时刻特定设备的第N次测量值。因此,您的数据确实即使在您将数据添加到数据库之前也有序列号,设备ID和时间戳,无论您是否愿意为此付费。
如果将数据存储在关系表(SQL)中,请将其存储为关系格式:normalized。每行一条记录。以可查询的格式存储信息。以不透明的二进制格式“聚合”记录会使整个数据库无法使用,因为无法查询,聚合,过滤数据。你对“这很好用”的定义基本上是“我可以写数据,没有人可以使用它”,这很难“好”。您也可以将数据转储到/dev/nul
...
将数据存储为正确的记录。将数据存储为适当的数据库类型,不要使用'opaque blobs'。并且“数据可能经常记录为每分钟一次”不是任何数据库标准的“频繁”。如果你说'每秒100次'那么我们就有话要说。
答案 1 :(得分:1)
这真的是个问题吗?想象一下,我们过高估计并说每次测量有50个字节的数据+元数据。 Google表明除非你处在一个非常紧张的环境中,否则你不会遇到很多问题。
答案 2 :(得分:0)
我相信您应该使用RRDtool来存储此类数据。 Wikipedia article