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