场景描述:在表中每秒产生一条数据切这张表中只有一条数据(即每秒的数据是进行删除再添加的,所以主信息表中只有一条),数据不进行累计。
1:通过互联网同步每秒产生的数据到远端。
2:实时显示当前时间点数据。
3:报表查询
实现:
所需服务:
服务端(数据获取并推送端,接受客户端已同步的信息,然后将同步过的数据在缓存表中进行删除。)
客户端(接受数据,并进行实时显示,同步完成后将同步成功的数据主键信息发送到服务端进行缓存删除。)
服务推送模式:因为采用了web框架所以直接使用了spring的定时任务
(两秒发送一次数据,发送数据为当前时间点未发送的数据和一个小时前已经发送过的的数据,发送过的数据缓存表中会有发送时间进行标示)。
发送标示是为了考虑到有时候会有客户端未开启的原因,所以为了避免发送不及时的数据浪费效率,就发送当前未发送的数据和一个小时前的数据。
服务接口ws:
接受数据id集合进行缓存数据进行删除。
客户端接口ws:
接受待同步数据并进行数据保存
问题:数据同步没问题,实时数据显示数据会有延迟。
原因分析:
1:当服务端客户端都连续开启的时候是不会有数据积累的,
服务会没两秒发送一次,此时数据库中缓存表中只有两条数据,直接发送给客户端,客户返回保存的数据信息,服务端直接删除,这些操作会在两秒钟完成, 基础是建
立在网络稳定和服务运行正常的情况下。
2:当客户端关闭了很长一段时间
服务端会积累大量的数据,此时数据库会发送当前时间的数据和一小时前的数据,在大量的数据积累的情况下,此次服务程序执行会在两秒的基础上有很长时间延迟(大量数据积累造成),
等查询好数据并组装好数据包发送(到此时间点已经耗费了一定的时间),数据到了客户端之后会进行数据解析,并执行保存(从数据到客户端并进行解析保存又进行了时间的消耗),
保存完之后会前台实时程序进行查询,此时前台的数据更新时间会在服务端和客户端的时间消耗之后进行的,所以在看到的是两秒的数据变更,但真正的实时时间是超过两秒的。
3:服务端关闭了一段时间
客户端查看不了实时数据,并没有获得数据积累
问题总结:
1:数据同步是一个跟数据量有关的任务,当要求实时显示的时候应该避免大数据量的问题,
2:实时显示是要求数据的最新并最快。所以不应该和大量数据同步集成在一块。
所以在整个过程中,我们需要的是要有实时的服务为我们提供最新最快的数据,并且呢,还要有同步可能存在的大量数据隐患的服务来为我们同步大量数据以保证数据的完整性。
所以这是以时间换量,或者以量换时间的问题,所以感觉这和索引有一样的道理(以空间换时间)二者不可兼得,