IoT-MQ的消息存储方法、装置、计算机设备和存储介质与流程

文档序号:18703808发布日期:2019-09-17 23:20阅读:202来源:国知局
IoT-MQ的消息存储方法、装置、计算机设备和存储介质与流程

本申请涉及消息列队技术领域,特别涉及一种物联网消息队列iot-mq的消息存储方法、装置、计算机设备和存储介质。



背景技术:

iot-mq(internetofthingsmessagequeue,中文是物联网消息队列)主要是解决物联网设备在互联网进行消息传输的问题,物联网设备的消息特点主要有:1.消息类型多,比如有家电信息,温度信息,天气信息等。2.设备数多,消息量大,一般来说物联网设备都是指千万级以上的设备,消息量一般是亿级的消息,iot-mq的主要功能就是对设备的这些消息进行采集,消息分发与消息存储,对于如此大量的消息存储一般需要满足:1.消息存储可靠,2.消息存储对整体iotmq的性能影响较小,3.存储的消息方便后续获取以便进行二次处理。目前市场的解决大致有:利用传统的关系数据库存储,例如用mysql,pg等,对于关系型数据库,在数据量非常大时,例如对于上亿的数据的存储等需要重新处理分库分表等,并且对于查询来说,在数据量非常大时会非常不好,并且大多关系型数据库是内存数据库,导致在消息存储和消息获取的性能并不理想。

申请内容

针对现有技术不足,本申请提出一种物联网消息队列iot-mq的消息存储方法、装置、计算机设备和存储介质,旨在解决采用关系型数据库存储大量的消息,消息存储性能差的问题。

本申请提出的技术方案是:

一种物联网消息队列iot-mq的消息存储方法,所述方法包括:

建立hashcode对应关系表,所述hashcode对应关系表中存储通过预设hash算法计算所得的hashcode与用于确定在消息库存储位置的hashcode的对应关系;

对每一条iot-mq的消息添加标记,获得多个第一标记;

将所述多个第一标记中每一个第一标记作为key输入到预设hash算法中计算,计算出每一个所述第一标记对应的第一hashcode;

根据所述hashcode对应关系表,在消息库中查找与每一个所述第一hashcode对应的第二hashcode,所述消息库为分布式的消息库;

将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽。

进一步地,在所述根据所述对每一条iot-mq的消息添加标记,获得多个第一标记的步骤之前,包括:

识别每一条iot-mq的消息所属的设备;

根据识别出每一条iot-mq的消息所属的设备,获取每一条iot-mq的消息所属的设备对应的设备id;

对应地,在所述根据所述对每一条iot-mq的消息添加标记,获得多个第一标记的步骤中,包括:

将每一条iot-mq的消息所属的设备对应的设备id作为标记;

对每一条iot-mq的消息添加对应的标记,获得多个第一标记。

进一步地,在所述将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽的步骤中,包括:

将所述iot-mq的消息按存储时间先后顺序存入对应的hash槽中的消息列表。

进一步地,在所述将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽的步骤之后,包括:

接收获取iot-mq的消息的请求,其中所述请求包括key;

将所述请求中的key输入到所述预设hash算法中计算,计算出所述请求中的key对应的hashcode,获得目标hashcode;

根据所述hashcode对应关系表,在消息库中查找与所述目标hashcode对应的hashcode,获得第一目标hashcode;

获取所述第一目标hashcode的hash槽,得到第一目标hash槽;

将所述第一目标hash槽中的全部消息返回给所述请求的发起方。

进一步地,在所述将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽的步骤之后,包括:

接收获取iot-mq的消息的请求,其中所述请求包括key和时间戳;

将所述请求中的key输入到所述预设hash算法中计算,计算出所述请求中的key对应的hashcode,获得第二目标hashcode;

根据所述hashcode对应关系表,在消息库中查找与所述第二目标hashcode对应的hashcode,获得第三目标hashcode;

获取所述第三目标hashcode的hash槽,得到目标hash槽;

判断所述时间戳是否为空值;

若所述时间戳为空值,则将所述目标hash槽中的全部消息返回给所述请求的发起方;

若所述时间戳不为空值,则将所述目标hash槽中的与所述时间戳对应的消息返回给所述请求的发起方。

进一步地,在所述若所述时间戳不为空值,则将所述目标hash槽中的与所述时间戳对应的消息返回给所述请求的发起方的步骤中,包括:

若所述时间戳不为空值,则从所述目标hash槽中的消息列表的头部开始查找与所述时间戳对应的存储时间;

当查找到与所述时间戳对应的存储时间时,获取查找到的存储时间对应的消息;

将获取到对应的消息返回给所述请求的发起方。

进一步地,在所述将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽的步骤之后,包括:

接收用户输入的有效存储时间;

获取每一hash槽的各消息的存储时间;

判断各消息的存储时间是否在所述有效存储时间内;

若判断出各消息的中存在存储时间不在所述有效存储时间内,则获取存储时间不在所述有效存储时间内的消息,获得目标消息;

将所述目标消息从对应的hash槽删除。

本申请还提供一种物联网消息队列iot-mq的消息存储装置,所述装置包括:

建立关系表模块,用于建立hashcode对应关系表,所述hashcode对应关系表中存储通过预设hash算法计算所得的hashcode与用于确定在消息库存储位置的hashcode的对应关系;

标记模块,用于对每一条iot-mq的消息添加标记,获得多个第一标记;

计算模块,用于将所述多个第一标记中每一个第一标记作为key输入到预设hash算法中计算,计算出每一个所述第一标记对应的第一hashcode;

查找模块,用于根据所述hashcode对应关系表,在消息库中查找与每一个所述第一hashcode对应的第二hashcode,所述消息库为分布式的消息库;

存储模块,用于将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽。

本申请还提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的方法的步骤。

本申请还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的方法的步骤。

根据上述的技术方案,本申请有益效果:对iot-mq的消息标记,将第一标记作为key通过预设hash算法计算,得到多个第一标记对应的hashcode,在消息库中查找对应的hashcode,将各iot-mq的消息分别存储到在消息库中对应的hashcode的hash槽,采用消息库存储,消息库是分布式高可靠的,保证大量消息存储的可靠性,旨在解决采用关系型数据库存储大量的消息,消息存储性能差的问题。

附图说明

图1是应用本申请实施例提供的物联网消息队列iot-mq的消息存储方法的流程图;

图2是应用本申请实施例提供的物联网消息队列iot-mq的消息存储装置的功能模块图;

图3是应用本申请实施例提供的计算机设备的结构示意框图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

如图1所示,本申请实施例提出一种物联网消息队列iot-mq的消息存储方法,所述方法包括以下步骤:

步骤s101、建立hashcode对应关系表,所述hashcode对应关系表中存储通过预设hash算法计算所得的hashcode与用于确定在消息库存储位置的hashcode的对应关系。

hashcode对应关系表中存储一个hashcode与另一个hashcode的对应关系,其中,一个hashcode是通过预设hash算法计算所得的hashcode,另一个hashcode是消息库中的hashcode,用来存储iot-mq的消息。

步骤s102、对每一条iot-mq的消息添加标记,获得多个第一标记。

在iot-mq接收到消息时,对每一条iot-mq的消息添加标记,在完成标记之后,获得多个第一标记。

在本实施例中,在步骤s102之前,包括:

检测iot-mq是否接收到消息;

若检测到iot-mq接收到消息,则触发对iot-mq的消息添加标记的信号。

在本实施例中,第一标记为类别标记,例如topic,识别该消息属于哪一类别消息。

在一些实施例中,第一标记为设备标记,例如设备id,识别该消息属于哪个设备。

在一些实施例中,在步骤s102之前,包括:

识别每一条iot-mq的消息所属的设备;

根据识别出每一条iot-mq的消息所属的设备,获取每一条iot-mq的消息所属的设备对应的设备id。

对每一条iot-mq的消息进行识别,识别每一条iot-mq的消息所属的设备,在识别出每一条iot-mq的消息所属的设备之后,根据识别出每一条iot-mq的消息所属的设备,获取每一条iot-mq的消息所属的设备对应的设备id。

对应地,在步骤s102中,包括:

将每一条iot-mq的消息所属的设备对应的设备id作为标记;

对每一条iot-mq的消息添加对应的标记,获得多个第一标记。

在获取每一条iot-mq的消息所属的设备对应的设备id之后,对每一条iot-mq的消息添加对应的设备id,将设备id作为标记,获得多个第一标记。

步骤s103、将所述多个第一标记中每一个第一标记作为key输入到预设hash算法中计算,计算出每一个所述第一标记对应的第一hashcode。

在获得多个第一标记之后,将多个第一标记中每一个第一标记作为key,key是hash算法中的一个参数,通过预设hash算法计算,计算出多个第一标记对应的hashcode,得到第一hashcode。

步骤s104、根据所述hashcode对应关系表,在消息库中查找与每一个所述第一hashcode对应的第二hashcode,所述消息库为分布式的消息库。

在计算出多个第一标记对应的hashcode之后,根据多个第一标记对应的hashcode,在消息库中查找对应的hashcode,即是在在消息库中查找与多个第一标记对应的hashcode相同的hashcode。

在本实施例中,消息库是rocketmq。

步骤s105、将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽。

在消息库中查找到对应的hashcode,根据多个第一标记对应的hashcode与在消息库中的hashcode的对应关系,在消息库中获取对应的hashcode的hash槽,将各iot-mq的消息分别存储到在消息库中对应的hashcode的hash槽。

在本实施例中,在步骤s105中,包括:

将所述iot-mq的消息按存储时间先后顺序存入对应的hash槽中的消息列表。

在hash槽中配置消息列表,消息列表用于存放iot-mq的消息,当iot-mq的消息存储到在消息库中对应的hashcode的hash槽时,将iot-mq的消息按存储时间先后顺序存入对应的hash槽中的消息列表,这样保证整个消息队表的头部是最新消息,尾部是最旧的消息。

在本实施例中,在步骤s105之后,包括:

接收获取iot-mq的消息的请求,其中所述请求包括key;

将所述请求中的key输入到所述预设hash算法中计算,计算出所述请求中的key对应的hashcode,获得目标hashcode;

根据所述hashcode对应关系表,在消息库中查找与所述目标hashcode对应的hashcode,获得第一目标hashcode;

获取所述第一目标hashcode的hash槽,得到第一目标hash槽;

将所述第一目标hash槽中的全部消息返回给所述请求的发起方。

接收获取iot-mq的消息的请求,请求包括key,在接收到请求之后,从请求中获取请求中的key,在本实施例中,还可以从请求中获取请求的发起方。在获取到请求中的key之后,通过预设hash算法计算,计算出请求中的key对应的hashcode,获得目标hashcode,根据目标hashcode,在消息库中查找与目标hashcode对应的hashcode,根据查找到对应的hashcode,获取查找到对应的hashcode的hash槽,得到第一目标hash槽,将第一目标hash槽中的全部消息返回给请求的发起方。其中,hash算法可以是md5或者sha-1。

在所述获取所述第一目标hashcode的hash槽,得到第一目标hash槽的步骤之后,包括:

判断所述第一目标hash槽是否存在消息。

对应地,在所述将所述第一目标hash槽中的全部消息返回给所述请求的发起方的步骤中,包括:

若判定所述第一目标hash槽是存在消息,则将所述第一目标hash槽中的全部消息返回给所述请求的发起方。

在所述判断所述第一目标hash槽是否存在消息的步骤之后,包括:

若判定所述第一目标hash槽是不存在消息,则将所述第一目标hash槽中不存在消息的信息返回给所述请求的发起方。

在判定所述第一目标hash槽是不存在消息时,需要将此情况通知给请求的发起方,那么将第一目标hash槽中不存在消息的信息返回给请求的发起方。

在一些实施例中,在步骤s105之后,包括:

接收获取iot-mq的消息的请求,其中所述请求包括key和时间戳;

将所述请求中的key输入到所述预设hash算法中计算,计算出所述请求中的key对应的hashcode,获得第二目标hashcode;

根据所述hashcode对应关系表,在消息库中查找与所述第二目标hashcode对应的hashcode,获得第三目标hashcode;

获取所述第三目标hashcode的hash槽,得到目标hash槽;

判断所述时间戳是否为空值;

若所述时间戳为空值,则将所述目标hash槽中的全部消息返回给所述请求的发起方;

若所述时间戳不为空值,则将所述目标hash槽中的与所述时间戳对应的消息返回给所述请求的发起方。

接收获取iot-mq的消息的请求,其中请求包括key和时间戳,在接收到请求之后,从请求中获取请求中的key,在本实施例中,还可以从请求中获取请求的发起方。在获取到请求中的key之后,通过预设hash算法计算,计算出请求中的key对应的hashcode,获得第二目标hashcode,根据第二目标hashcode,在消息库中查找与第二目标hashcode对应的hashcode,根据查找到对应的hashcode,获取查找到对应的hashcode的hash槽,得到目标hash槽,从请求中获取时间戳,对时间戳进行判断,判断时间戳是否为空值,若时间戳为空值,则将目标hash槽中的全部消息返回给请求的发起方,若时间戳不为空值,则将目标hash槽中的与时间戳对应的消息返回给请求的发起方。

在所述若所述时间戳不为空值,则将所述目标hash槽中的与所述时间戳对应的消息返回给所述请求的发起方的步骤中,包括:

若所述时间戳不为空值,则从所述目标hash槽中的消息列表的头部开始查找与所述时间戳对应的存储时间;

当查找到与所述时间戳对应的存储时间时,获取查找到的存储时间对应的消息;

将获取到对应的消息返回给所述请求的发起方。

如果时间戳不为空值,则从目标hash槽中的消息列表的头部开始查找,查找与时间戳对应的存储时间,一直查找到消息列表的尾部,结束查找,当查找到与时间戳对应的存储时间时,获取查找到的存储时间对应的消息,将获取到对应的消息返回给请求的发起方。还可以是,如果时间戳不为空值,则从目标hash槽中的消息列表的头部开始查找,查找与时间戳对应的存储时间,当查找到与时间戳对应的存储时间之后,继续查找,当查找到不与时间戳对应的存储时间时,结束查找,当查找到与时间戳对应的存储时间时,获取查找到的存储时间对应的消息,将获取到对应的消息返回给请求的发起方。

在本实施例中,在步骤s105之后,包括:

接收用户输入的有效存储时间;

获取每一hash槽的各消息的存储时间;

判断各消息的存储时间是否在所述有效存储时间内;

若判断出各消息的中存在存储时间不在所述有效存储时间内,则获取存储时间不在所述有效存储时间内的消息,获得目标消息;

将所述目标消息从对应的hash槽删除。

综上所述,对iot-mq的消息标记,将第一标记作为key通过预设hash算法计算,得到多个第一标记对应的hashcode,在消息库中查找对应的hashcode,将各iot-mq的消息分别存储到在消息库中对应的hashcode的hash槽,采用消息库存储,消息库是分布式高可靠的,保证大量消息存储的可靠性,旨在解决采用关系型数据库存储大量的消息,消息存储性能差的问题。

如图2所示,本申请实施例提出一种物联网消息队列iot-mq的消息存储装置1,装置1包括建立关系表模块11、标记模块12、计算模块13、查找模块14和存储模块15。

建立关系表模块11,用于建立hashcode对应关系表,所述hashcode对应关系表中存储通过预设hash算法计算所得的hashcode与用于确定在消息库存储位置的hashcode的对应关系。

标记模块12,用于对每一条iot-mq的消息添加标记,获得多个第一标记。

在iot-mq接收到消息时,对每一条iot-mq的消息添加标记,在完成第一标记之后,获得多个第一标记。

在本实施例中,装置1包括:

第一检测模块,用于检测iot-mq是否接收到消息;

第一触发模块,用于若检测到iot-mq接收到消息,则触发对iot-mq的消息添加标记的信号。

在本实施例中,第一标记为类别标记,例如topic,识别该消息属于哪一类消息。

在一些实施例中,第一标记为设备标记,例如设备id,识别该消息属于哪个设备。

在一些实施例中,装置1包括:

第一识别模块,用于识别每一条iot-mq的消息所属的设备;

第一获取模块,用于根据识别出每一条iot-mq的消息所属的设备,获取每一条iot-mq的消息所属的设备对应的设备id。

对每一条iot-mq的消息进行识别,识别每一条iot-mq的消息所属的设备,在识别出每一条iot-mq的消息所属的设备之后,根据识别出每一条iot-mq的消息所属的设备,获取每一条iot-mq的消息所属的设备对应的设备id。

对应地,标记模块12包括:

设备id标记模块,用于将每一条iot-mq的消息所属的设备对应的设备id作为标记;

第一子标记模块,用于对每一条iot-mq的消息添加对应的标记,获得多个第一标记。

在获取每一条iot-mq的消息所属的设备对应的设备id之后,对每一条iot-mq的消息添加对应的设备id,将设备id作为标记,获得多个第一标记。

计算模块13,用于将所述多个第一标记中每一个第一标记作为key输入到预设hash算法中计算,计算出每一个所述第一标记对应的第一hashcode。

在获得多个第一标记之后,将多个第一标记中每一个第一标记作为key,key是hash算法中的一个参数,通过预设hash算法计算,计算出多个第一标记对应的hashcode,得到第一hashcode。

查找模块14,用于根据所述hashcode对应关系表,在消息库中查找与每一个所述第一hashcode对应的第二hashcode,所述消息库为分布式的消息库。

在计算出多个第一标记对应的hashcode之后,根据多个第一标记对应的hashcode,在消息库中查找对应的hashcode,即是在在消息库中查找与多个第一标记对应的hashcode相同的hashcode。

在本实施例中,消息库是rocketmq。

存储模块15,用于将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽。

在消息库中查找到对应的hashcode,根据多个第一标记对应的hashcode与在消息库中的hashcode的对应关系,在消息库中获取对应的hashcode的hash槽,将各iot-mq的消息分别存储到在消息库中对应的hashcode的hash槽。

在本实施例中,存储模块15包括:

第一子存储模块,用于将所述iot-mq的消息按存储时间先后顺序存入对应的hash槽中的消息列表。

在hash槽中配置消息列表,消息列表用于存放iot-mq的消息,当iot-mq的消息存储到在消息库中对应的hashcode的hash槽时,将iot-mq的消息按存储时间先后顺序存入对应的hash槽中的消息列表,这样保证整个消息队表的头部是最新消息,尾部是最旧的消息。

在本实施例中,装置1包括:

第一接收模块,用于接收获取iot-mq的消息的请求,其中所述请求包括key;

第一计算模块,用于将所述请求中的key输入到所述预设hash算法中计算,计算出所述请求中的key对应的hashcode,获得目标hashcode;

第一查找模块,用于根据所述hashcode对应关系表,在消息库中查找与所述目标hashcode对应的hashcode,获得第一目标hashcode;

第一获得模块,用于获取所述第一目标hashcode的hash槽,得到第一目标hash槽;

第一返回模块,用于将所述第一目标hash槽中的全部消息返回给所述请求的发起方。

接收获取iot-mq的消息的请求,请求包括key,在接收到请求之后,从请求中获取请求中的key,在本实施例中,还可以从请求中获取请求的发起方。在获取到请求中的key之后,通过预设hash算法计算,计算出请求中的key对应的hashcode,获得目标hashcode,根据目标hashcode,在消息库中查找与目标hashcode对应的hashcode,根据查找到对应的hashcode,获取查找到对应的hashcode的hash槽,得到第一目标hash槽,将第一目标hash槽中的全部消息返回给请求的发起方。其中,hash算法可以是md5或者sha-1。

装置1包括:

第一判断模块,用于判断所述第一目标hash槽是否存在消息。

对应地,第一返回模块包括:

第一子返回模块,用于若判定所述第一目标hash槽是存在消息,则将所述第一目标hash槽中的全部消息返回给所述请求的发起方。

装置1包括:

第一返回模块,用于若判定所述第一目标hash槽是不存在消息,则将所述第一目标hash槽中不存在消息的信息返回给所述请求的发起方。

在判定所述第一目标hash槽是不存在消息时,需要将此情况通知给请求的发起方,那么将第一目标hash槽中不存在消息的信息返回给请求的发起方。

在一些实施例中,装置1包括:

第二接收模块,用于接收获取iot-mq的消息的请求,其中所述请求包括key和时间戳;

第三获取模块,用于

第三计算模块,用于将所述请求中的key输入到所述预设hash算法中计算,计算出所述请求中的key对应的hashcode,获得第二目标hashcode;

第三查找模块,用于在消息库中查找与所述第二目标hashcode对应的hashcode,获得第三目标hashcode;

第二获得模块,用于获取所述第三目标hashcode的hash槽,得到目标hash槽;

第四获取模块,用于

第二判断模块,用于判断所述时间戳是否为空值;

第三返回模块,用于若所述时间戳为空值,则将所述目标hash槽中的全部消息返回给所述请求的发起方;

第四返回模块,用于若所述时间戳不为空值,则将所述目标hash槽中的与所述时间戳对应的消息返回给所述请求的发起方。

接收获取iot-mq的消息的请求,其中请求包括key和时间戳,在接收到请求之后,从请求中获取请求中的key,在本实施例中,还可以从请求中获取请求的发起方。在获取到请求中的key之后,通过预设hash算法计算,计算出请求中的key对应的hashcode,获得第二目标hashcode,根据第二目标hashcode,在消息库中查找与第二目标hashcode对应的hashcode,根据查找到对应的hashcode,获取查找到对应的hashcode的hash槽,得到目标hash槽,从请求中获取时间戳,对时间戳进行判断,判断时间戳是否为空值,若时间戳为空值,则将目标hash槽中的全部消息返回给请求的发起方,若时间戳不为空值,则将目标hash槽中的与时间戳对应的消息返回给请求的发起方。

第四返回模块包括:

第一子查找模块,用于若所述时间戳不为空值,则从所述目标hash槽中的消息列表的头部开始查找与所述时间戳对应的存储时间;

第一子获取模块,用于当查找到与所述时间戳对应的存储时间时,获取查找到的存储时间对应的消息;

第一子返回模块,用于将获取到对应的消息返回给所述请求的发起方。

如果时间戳不为空值,则从目标hash槽中的消息列表的头部开始查找,查找与时间戳对应的存储时间,一直查找到消息列表的尾部,结束查找,当查找到与时间戳对应的存储时间时,获取查找到的存储时间对应的消息,将获取到对应的消息返回给请求的发起方。还可以是,如果时间戳不为空值,则从目标hash槽中的消息列表的头部开始查找,查找与时间戳对应的存储时间,当查找到与时间戳对应的存储时间之后,继续查找,当查找到不与时间戳对应的存储时间时,结束查找,当查找到与时间戳对应的存储时间时,获取查找到的存储时间对应的消息,将获取到对应的消息返回给请求的发起方。

在本实施例中,装置1包括:

第四接收模块,用于接收用户输入的有效存储时间;

第五获取模块,用于获取每一hash槽的各消息的存储时间;

第三判断模块,用于判断各消息的存储时间是否在所述有效存储时间内;

第六获取模块,用于若判断出各消息的中存在存储时间不在所述有效存储时间内,则获取存储时间不在所述有效存储时间内的消息,获得目标消息;

第一删除模块,用于将所述目标消息从对应的hash槽删除。

综上所述,对iot-mq的消息标记,将第一标记作为key通过预设hash算法计算,得到多个第一标记对应的hashcode,在消息库中查找对应的hashcode,将各iot-mq的消息分别存储到在消息库中对应的hashcode的hash槽,采用消息库存储,消息库是分布式高可靠的,保证大量消息存储的可靠性,旨在解决采用关系型数据库存储大量的消息,消息存储性能差的问题。

如图3所示,本申请实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储物联网消息队列iot-mq的消息存储方法的模型等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种物联网消息队列iot-mq的消息存储方法。

上述处理器执行上述物联网消息队列iot-mq的消息存储方法的步骤:建立hashcode对应关系表,所述hashcode对应关系表中存储通过预设hash算法计算所得的hashcode与用于确定在消息库存储位置的hashcode的对应关系;对每一条iot-mq的消息添加标记,获得多个第一标记;将所述多个第一标记中每一个第一标记作为key输入到预设hash算法中计算,计算出每一个所述第一标记对应的第一hashcode;根据所述hashcode对应关系表,在消息库中查找与每一个所述第一hashcode对应的第二hashcode,所述消息库为分布式的消息库;将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽。

在一个实施例中,上述根据所述对每一条iot-mq的消息添加标记,获得多个第一标记的步骤之前,包括:

识别每一条iot-mq的消息所属的设备;

根据识别出每一条iot-mq的消息所属的设备,获取每一条iot-mq的消息所属的设备对应的设备id;

对应地,在所述根据所述对每一条iot-mq的消息添加标记,获得多个第一标记的步骤中,包括:

将每一条iot-mq的消息所属的设备对应的设备id作为标记;

对每一条iot-mq的消息添加对应的标记,所述获得多个第一标记。

在一个实施例中,上述将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽的步骤中,包括:

将所述iot-mq的消息按存储时间先后顺序存入对应的hash槽中的消息列表。

在一个实施例中,上述将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽的步骤之后,包括:

接收获取iot-mq的消息的请求,其中所述请求包括key;

将所述请求中的key输入到所述预设hash算法中计算,计算出所述请求中的key对应的hashcode,获得目标hashcode;

根据所述hashcode对应关系表,在消息库中查找与所述目标hashcode对应的hashcode,获得第一目标hashcode;

获取所述第一目标hashcode的hash槽,得到第一目标hash槽;

将所述第一目标hash槽中的全部消息返回给所述请求的发起方。

在一个实施例中,上述将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽的步骤之后,包括:

接收获取iot-mq的消息的请求,其中所述请求包括key和时间戳;

将所述请求中的key输入到所述预设hash算法中计算,计算出所述请求中的key对应的hashcode,获得第二目标hashcode;

根据所述hashcode对应关系表,在消息库中查找与所述第二目标hashcode对应的hashcode,获得第三目标hashcode;

获取所述第三目标hashcode的hash槽,得到目标hash槽;

判断所述时间戳是否为空值;

若所述时间戳为空值,则将所述目标hash槽中的全部消息返回给所述请求的发起方;

若所述时间戳不为空值,则将所述目标hash槽中的与所述时间戳对应的消息返回给所述请求的发起方。

在一个实施例中,上述若所述时间戳不为空值,则将所述目标hash槽中的与所述时间戳对应的消息返回给所述请求的发起方的步骤中,包括:

若所述时间戳不为空值,则从所述目标hash槽中的消息列表的头部开始查找与所述时间戳对应的存储时间;

当查找到与所述时间戳对应的存储时间时,获取查找到的存储时间对应的消息;

将获取到对应的消息返回给所述请求的发起方。

在一个实施例中,上述将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽的步骤之后,包括:

接收用户输入的有效存储时间;

获取每一hash槽的各消息的存储时间;

判断各消息的存储时间是否在所述有效存储时间内;

若判断出各消息的中存在存储时间不在所述有效存储时间内,则获取存储时间不在所述有效存储时间内的消息,获得目标消息;

将所述目标消息从对应的hash槽删除。

本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定。

本申请实施例的计算机设备,对iot-mq的消息标记,将第一标记作为key通过预设hash算法计算,得到多个第一标记对应的hashcode,在消息库中查找对应的hashcode,将各iot-mq的消息分别存储到在消息库中对应的hashcode的hash槽,采用消息库存储,消息库是分布式高可靠的,保证大量消息存储的可靠性,旨在解决采用关系型数据库存储大量的消息,消息存储性能差的问题。

本申请一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现一种物联网消息队列iot-mq的消息存储方法,具体为:建立hashcode对应关系表,所述hashcode对应关系表中存储通过预设hash算法计算所得的hashcode与用于确定在消息库存储位置的hashcode的对应关系;对每一条iot-mq的消息添加标记,获得多个第一标记;将所述多个第一标记中每一个第一标记作为key输入到预设hash算法中计算,计算出每一个所述第一标记对应的第一hashcode;在消息库中查找与每一个所述第一hashcode对应的第二hashcode,所述消息库为分布式的消息库;将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽。

在一个实施例中,上述根据所述对每一条iot-mq的消息添加标记,获得多个第一标记的步骤之前,包括:

识别每一条iot-mq的消息所属的设备;

根据识别出每一条iot-mq的消息所属的设备,获取每一条iot-mq的消息所属的设备对应的设备id;

对应地,在所述根据所述对每一条iot-mq的消息添加标记,获得多个第一标记的步骤中,包括:

将每一条iot-mq的消息所属的设备对应的设备id作为标记;

对每一条iot-mq的消息添加对应的标记,获得多个第一标记。

在一个实施例中,上述将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽的步骤中,包括:

将所述iot-mq的消息按存储时间先后顺序存入对应的hash槽中的消息列表。

在一个实施例中,上述将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽的步骤之后,包括:

接收获取iot-mq的消息的请求,其中所述请求包括key;

将所述请求中的key输入到所述预设hash算法中计算,计算出所述请求中的key对应的hashcode,获得目标hashcode;

根据所述hashcode对应关系表,在消息库中查找与所述目标hashcode对应的hashcode,获得第一目标hashcode;

获取所述第一目标hashcode的hash槽,得到第一目标hash槽;

将所述第一目标hash槽中的全部消息返回给所述请求的发起方。

在一个实施例中,上述将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽的步骤之后,包括:

接收获取iot-mq的消息的请求,其中所述请求包括key和时间戳;

将所述请求中的key输入到所述预设hash算法中计算,计算出所述请求中的key对应的hashcode,获得第二目标hashcode;

根据所述hashcode对应关系表,在消息库中查找与所述第二目标hashcode对应的hashcode,获得第三目标hashcode;

获取所述第三目标hashcode的hash槽,得到目标hash槽;

判断所述时间戳是否为空值;

若所述时间戳为空值,则将所述目标hash槽中的全部消息返回给所述请求的发起方;

若所述时间戳不为空值,则将所述目标hash槽中的与所述时间戳对应的消息返回给所述请求的发起方。

在一个实施例中,上述若所述时间戳不为空值,则将所述目标hash槽中的与所述时间戳对应的消息返回给所述请求的发起方的步骤中,包括:

若所述时间戳不为空值,则从所述目标hash槽中的消息列表的头部开始查找与所述时间戳对应的存储时间;

当查找到与所述时间戳对应的存储时间时,获取查找到的存储时间对应的消息;

将获取到对应的消息返回给所述请求的发起方。

在一个实施例中,上述将对应不同所述第一hashcode的iot-mq的消息分别存储到与各所述第一hashcode对应的第二hashcode的hash槽的步骤之后,包括:

接收用户输入的有效存储时间;

获取每一hash槽的各消息的存储时间;

判断各消息的存储时间是否在所述有效存储时间内;

若判断出各消息的中存在存储时间不在所述有效存储时间内,则获取存储时间不在所述有效存储时间内的消息,获得目标消息;

将所述目标消息从对应的hash槽删除。

本申请实施例的存储介质,对iot-mq的消息标记,将第一标记作为key通过预设hash算法计算,得到多个第一标记对应的hashcode,在消息库中查找对应的hashcode,将各iot-mq的消息分别存储到在消息库中对应的hashcode的hash槽,采用消息库存储,消息库是分布式高可靠的,保证大量消息存储的可靠性,旨在解决采用关系型数据库存储大量的消息,消息存储性能差的问题。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双速据率sdram(ssrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内所作的任何修改、等同替换和改进等,均应包括在本申请的保护范围之内。

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