一种基于内存映射的物联网时序数据高效管理方法及系统与流程

文档序号:37932836发布日期:2024-05-11 00:11阅读:10来源:国知局
一种基于内存映射的物联网时序数据高效管理方法及系统与流程

本发明涉及时序数据,具体的说是一种基于内存映射的物联网时序数据高效管理方法及系统。


背景技术:

1、最近几年,物联网得到了飞速的发展。在车联网、设备监控、网络监控、快递跟踪等物联网典型场景下,会产生海量监控数据、轨迹数据、传感器数据。这些数据产生频率高、数据量大、严重依赖采集时间,是典型的时序数据。传统的数据库是无法应对这种高写入的海量实时数据的,需要使用能够支持时序模型的时序数据库对这些数据进行储存和分析。

2、目前主流的时序数据库读写文件一般要有三个步骤:把文件内容读入到内存中、修改内存中的内容、把内存的数据写入到文件中。页缓存(page cache)作为中间层进行文件的修改和读加速。数据库在读取文件时,为了减少磁盘io,会将文件读取到页缓存,以便下次读取直接从内存访问,提高读取速度。受限于部署机器内存大小,这个页缓存会有大小限制。超过这个缓存大小,数据库应用会进行页面淘汰,即将访问频率低的缓存删除,加载新访问的文件内容。如果页缓存对应的文件发生修改,也需要将页缓存及时进行落盘,保证缓存与文件的一致性。

3、上述内存与文件的同步导致了应用的复杂度,常规的文件操作需要从磁盘到页缓存再到用户主存的两次数据拷贝。基于此,本文提供一种内存零拷贝方法,利用内存映射(mmap)技术直接在用户空间读写页缓存,免去将页缓存的数据复制到用户空间缓冲区的过程,从而达到更高的读写效率,简化编程模型,提高开发效率和系统稳定性。


技术实现思路

1、本发明针对目前技术发展的需求和不足之处,提供一种基于内存映射的物联网时序数据高效管理方法及系统,来不通过页缓存,直接把文件映射到虚拟内存进行时序数据读写,以提高读写性能,避免内核空间到用户空间的数据拷贝,达到理论上最快的读写速度。

2、第一方面,本发明提供一种基于内存映射的物联网时序数据高效管理方法,解决上述技术问题采用的技术方案如下:

3、一种基于内存映射的物联网时序数据高效管理方法,该方法的实现包括:

4、采用列存格式存储时序数据表,时序数据表的字段包括定长字段和变长字段,其中,通过计算定长字段占用的字节数与时序数据表总行数的乘积,得到时序数据表中定长字段所在列的数据占用的总字节数,通过.s文件和数据列文件获取时序数据表中变长字段所在列的数据占用的总字节数,.s文件记录实际数据的变长字符串长度及其内容,数据列文件记录.s文件的偏移,变长字段所在列的数据占用的总字节数即数据列文件最后一行的记录数据;

5、通过mmap函数或remap函数将时序数据表的列数据写入内存映射文件;

6、通过一个时序数据表管理设定数量的设备,设计一个元数据定长管理策略,以快速定位到时序列文件上的数据地址,实现不同设备时序数据的快速读写。

7、可选的,对于定长字段,每个字段用单独的文件存储,通过内存映射mmap的方式进行读写;

8、对于定长字段的读取,直接使用定长字段占用的字节数乘以时序数据表总行数得到在mmap文件上的地址,进而转换为实际数据类型获取访问。

9、可选的,通过mmap函数或remap函数将时序数据表的列数据写入内存映射文件,这一过程具体包括:

10、首先计算待写入列数据的总字节数,并判断内存映射文件的闲置空间是否足够写入该列数据,

11、若是,则通过mmap函数获取内存映射文件首地址,并在文件头中持久化记录内存映射文件已使用大小,

12、若否,则通过remap函数对内存映射文件进行扩容,随后按照读流程查找到写入首地址,将数据写入对应地址空间,即可完成写入操作。

13、进一步可选的,通过remap函数将时序数据表的列数据写入内存映射文件时,设计预留策略,成倍或者按照百分比一次性预留设定空间,在设定空间满足写入空间要求后,再按照读流程查找到写入首地址,将数据写入对应地址空间,完成写入操作。

14、可选的,将时序数据表的列数据写入内存映射文件后,内存映射文件实时同步至磁盘文件,或者定时通过msync函数强制写入磁盘文件。

15、第二方面,本发明提供一种基于内存映射的物联网时序数据高效管理系统,解决上述技术问题采用的技术方案如下:

16、一种基于内存映射的物联网时序数据高效管理系统,其包括:

17、格式设置模块,用于采用列存格式存储时序数据表,时序数据表的字段包括定长字段和变长字段,其中,通过计算定长字段占用的字节数与时序数据表总行数的乘积,得到时序数据表中定长字段所在列的数据占用的总字节数,通过.s文件和数据列文件获取时序数据表中变长字段所在列的数据占用的总字节数,.s文件记录实际数据的变长字符串长度及其内容,数据列文件记录.s文件的偏移,变长字段所在列的数据占用的总字节数即数据列文件最后一行的记录数据;

18、数据写入模块,用于通过mmap函数或remap函数将时序数据表的列数据写入内存映射文件;

19、定长管理模块,用于设定时序数据表管理设备的数量,同时设计一个元数据定长管理策略,以快速定位到时序列文件上的数据地址,实现不同设备时序数据的快速读写。

20、进一步可选的,对于定长字段,每个字段用单独的文件存储,通过内存映射mmap的方式进行读写;

21、对于定长字段的读取,直接使用定长字段占用的字节数乘以时序数据表总行数得到在mmap文件上的地址,进而转换为实际数据类型获取访问。

22、可选的,所涉及数据写入模块具体包括:

23、获取计算子模块,用于获取待写入的列数据,并计算该列数据的总字节数;

24、对比判断子模块,用于判断内存映射文件的闲置空间是否足够写入该列数据,

25、定长写入子模块,用于在内存映射文件的闲置空间足够写入该列数据时通过mmap函数获取内存映射文件首地址,并在文件头中持久化记录内存映射文件已使用大小,

26、变长写入子模块,用于在内存映射文件的闲置空间不够写入该列数据时通过remap函数对内存映射文件进行扩容,随后按照读流程查找到写入首地址,将数据写入对应地址空间,即可完成写入操作。

27、进一步可选的,所涉及变长写入子模块通过remap函数将时序数据表的列数据写入内存映射文件时,预先设计预留策略,来成倍或者按照百分比一次性预留设定空间,在设定空间满足写入空间要求后,再按照读流程查找到写入首地址,将数据写入对应地址空间,完成写入操作。

28、可选的,所涉及系统还包括磁盘写入模块;

29、时序数据表的列数据写入内存映射文件后,磁盘写入模块将内存映射文件实时同步至磁盘文件,或者定时通过msync函数强制写入磁盘文件。

30、本发明的一种基于内存映射的物联网时序数据高效管理方法及系统,与现有技术相比具有的有益效果是:

31、(1)本发明利用内存映射技术直接在用户空间读写页缓存,可以免去将页缓存的数据复制到用户空间缓冲区的过程,从而达到更高的读写效率,简化编程模型,提高开发效率和系统稳定性;

32、(2)本发明解决了内存映射管理变长文件不便的问题,通过定长管理、空间预留等方法,可实现变长数据类型的读写;

33、(3)本发明支持在使用有限系统资源情况下,通过定长元数据管理,对海量设备并发读写,降低数据库对操作系统资源占用。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1