关于数据库存储和读取的算法问题

  有a、b、c3台电脑向服务器发数据,发送的内容为电脑ID、值、时刻,a每隔10S发一次(有可能会延迟),b每隔15S发一次(同上),c每隔5S发一次(同上),发送的值有可能相同。数据库要保...

  有a、b、c 3台电脑向服务器发数据,发送的内容为电脑ID、值、时刻,a每隔10S发一次(有可能会延迟),b每隔15S发一次(同上),c每隔5S发一次(同上),发送的值有可能相同。数据库要保存这3台电脑的所有数据。

  现在希望实现的效果是:为节省数据库空间,如果同一个电脑连续发送相同的值,那数据库中只存一条记录,同时读取数据时希望能还原为原始的每条数据,那数据表应该设计哪些字段,如何存储和还原?

  表字段设计为:id(主键),ip(电脑),value(值),startTime,endTime,如果连续的值相同,那么只修改endTime字段,如果值不同,新增一条记录。不知道这种思路是否可行,从表中取数据的时候应该怎么算出每条数据?展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  注意插入的事务问题追问假如一共发送了50条数据,那么表1的记录还是50条,并没有减少数量,如果把表1 的valueid直接换成value,那就是最初的每条记录,相当于没有压缩,不知道我理解的对不对。追答如果最后还要还原原如数据,那么是无法对50条数据进行压缩的,你提出的方案starttime,endtime是一个时间范围,无法区分究竟在该时间段有多少请求送到服务器,什么时间送到服务器,所以无法还原。而在你原题目前提下,现在可以进行压缩的,也只有value值。

  如果不进行数据还原,只是进行一段时间内某台机器的状态记录,你的方案是可行的,但实际上endtime是没必要的,因为根据starttime进行order后,状态的结束时间其实就是下一状态的开始时间。

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。