一种kafka数据的查询方法、装置及计算机可读存储介质
技术领域
本发明属于数据查询
技术领域
,具体涉及一种kafka数据的查询方法、装置及计算机可读存储介质。背景技术
Kafka是一种高吞吐量的分布式发布订阅消息系统,是由Apache基金会维护的一个开源流处理平台,核心代码主要是通过java与scala编写;通常情况下,kafka适用于日志收集、消息系统、用户活动跟踪、运用指标监控以及流式处理等场景,且由于其具有优秀的高吞吐的优点,而被广泛运用于大数据场景下的消息系统。
目前,针对kafka系统中数据的查询,主要是使用Confluentinc公司推出的KSQL系统,KSQL系统通过分布式的计算引擎,将Kafka数据实时接入消费,而客户端则可通过KSQL进行实时查询,主要原理为:将KSQL部署在Kafka系统中的所有节点上,并同时把KSQL的数据接入引擎Kafka-Stream部署在Kafka集群的各个节点,从而通过搜索每个节点实现数据查询。
但是前述查询方式存在以下不足:在查询kafka系统中某个数据时,需要遍历系统中的整个Topic(消息集合)或者Partition(分区)中的数据,进而导致查询效率较低,因此,如何提高对kafka系统中的数据查找效率,成为一个亟待解决的问题。
发明内容
本发明的目的是提供一种kafka数据的查询方法、装置及计算机可读存储介质,以解决现有kafka系统中数据查询效率较低的问题。
为了实现上述目的,本发明采用以下技术方案:
本发明提供了一种kafka数据的查询方法,包括:
获取待查询数据的第一关键字符;
根据所述第一关键字符,确定所述待查询数据在kafka系统中所在的第一分区,以及所述待查询数据在所述第一分区中的第一查询值;
判断所述第一分区对应bitmap中每个bitmap内与所述第一查询值对应bit位的值是否为1,以确定出n个bitmap,其中,所述n个bitmap中的每个bitmap内与所述第一查询值对应的bit位的值为1,且n为大于或等于1的整数;
从所述n个bitmap对应的分段文件中提取出所述待查询数据。
基于上述公开的内容,本发明在查询时,可通过待查询数据的第一关键字符,确定其在kafka系统中存储的区域(即第一分区),从而缩小查找范围;同时,还可根据第一关键字符得到待查询数据在第一分区中的第一查询值,其实质为:利用该第一查询值,查找到第一分区中各个bitmap中与该第一查询值对应的bit位,从而通过判断查找到的bit位的值是否为1,来排除一定不存储有该待查询数据的分段文件(即只要bit位的标志为1,则说明该bitmap对应的分段文件内存储有待查询数据,反之,若为0,则不存在);因此,即可在查找时实现第一分区内分段文件的过滤,从而减少在查询时所遍历的文件个数;由此,本发明即可在查询时避免遍历kafka系统中每个分区以及每个分段文件,进而提高了查询效率。
在一个可能的设计中,根据所述第一关键字符,确定所述待查询数据在kafka系统中所在的第一分区,包括:
获取所述kafka系统中的分区个数,以及每个分区对应的排序序号;
根据所述分区个数,对所述第一关键字符进行第一哈希运算,得到第一哈希值;
将排序序号等于所述第一哈希值的分区,作为所述待查询数据在kafka系统中所在的第一分区。
基于上述公开的内容,本发明公开了根据第一关键字符确定待查询数据在kafka系统中存储的区域(即第一分区)的具体方法,即根据分区个数,对第一关键字符进行第一哈希运算,得到第一哈希值(其实质为:利用非加密散列函数得到第一关键字符的哈希数,然后用哈希数除以分区个数,取余数,余数则为第一哈希值);而排序序号与第一哈希值相等的分区,则作为第一分区。
在一个可能的设计中,根据所述第一关键字符,确定所述待查询数据在所述第一分区中的第一查询值,包括:
获取所述第一分区对应bitmap中任一bitmap内bit位的总位数,其中,所述第一分区对应bitmap中每个bitmap内bit位的总位数相同;
根据所述总位数,对所述第一关键字符进行第二哈希运算,得到所述第一查询值。
在一个可能的设计中,根据所述总位数,对所述第一关键字符进行第二哈希运算,得到所述第一查询值,包括:
利用非加密散列函数,得到所述第一关键字符的哈希数;
将所述哈希数与所述总位数进行取余运算,得到所述哈希数与所述总位数的余数;
将所述余数作为所述第一查询值。
基于上述公开的内容,本发明公开了根据第一关键字符得到待查询数据在第一分区中的第一查询值的具体方法,其原理与前述确定第一分区一致,均是先利用非加密散列函数,得到第一关键字符的哈希数,然后使用哈希数除以第一分区中任一bitmap内bit位的总位数,并取余数,而此次计算得到的余数则作为第一查询值。
在一个可能的设计中,所述方法还包括:
每隔预设时间间隔,将kafka系统中每个分区对应bitmap中的每个bitmap内所有bit位的值置为0;
根据kafka系统中每个分区内的每个已存储数据的第二关键字符,计算每个已存储数据的第二查询值,并将每个已存储数据所在分段文件对应bitmap中与所述第二查询值对应bit位的值置1,以完成对应bitmap的更新。
基于上述公开的内容,本发明通过每隔预设时间间隔,将kafka系统中每个分区对应bitmap中的每个bitmap内所有bit位的值置为0(即相当于将每个分区内的所有bitmap进行数据清空),然后再根据每个分区内的每个已存储数据的第二关键字符,计算每个已存储数据的第二查询值,以重新将每个已存储数据所在分段文件对应bitmap中与第二查询值对应bit位的值置1;通过上述设计,可保证bitmap内数据的时效性,进而保障数据查找的准确性。
在一个可能的设计中,所述方法还包括:
获取待存储数据的第三关键字符;
根据所述第三关键字符,得到所述待储存数据在kafka系统中的第三分区,以及所述待存储数据在所述第三分区中的第三查询值;
将所述待存储数据存储至所述第三分区中的分段文件内,并将与所述分段文件对应bitmap中与所述第三查询值对应bit位的值置为1,以便在有所述待查询数据时,根据权利要求1~5所述的方法进行数据查询。
基于上述公开的内容,本发明公开了数据存储的具体方法,即在数据存储时,通过待存储数据的第三关键字符,确定该待存储数据在kafka系统中所在的第三分区(即相当于确定了待存储数据在kafka系统中的存储区域),以及其在第三分区中的第三查询值,以便在待存储数据存储至第三分区中的分段文件中时,将待存储数据所在分段文件对应bitmap内与第三查询值对应bit位的值置1(其实质为:通过为每个分段文件配置一个bitmap,并在数据存储时将与第三查询值对应bit位的值置1,用于表征该分段文件内存入了数据);通过上述设计,可为后续数据查找提供查询索引,以及可在查询时过滤掉未存储有待查询数据的分段文件,从而完成数据的快速查找,提高查找效率。
第二方面,本发明提供了一种kafka数据的查询装置,包括:获取单元、存储信息查找单元、判断单元以及数据查找单元;
所述获取单元,用于获取待查询数据的第一关键字符;
所述存储信息查找单元,用于根据所述第一关键字符,确定所述待查询数据在kafka系统中所在的第一分区,以及所述待查询数据在所述第一分区中的第一查询值;
所述判断单元,用于判断所述第一分区对应bitmap中每个bitmap内与所述第一查询值对应bit位的值是否为1,以确定出n个bitmap,其中,所述n个bitmap中的每个bitmap内与所述第一查询值对应的bit位的值为1,且n为大于或等于1的整数;
所述数据查找单元,用于从所述n个bitmap对应的分段文件中提取出所述待查询数据。
在一个的可能的设计中,所述存储信息查找单元包括:计算子单元以及分区确定子单元;
所述获取单元,还用于获取所述kafka系统中的分区个数,以及每个分区对应的排序序号;
所述计算子单元,用于根据所述分区个数,对所述第一关键字符进行第一哈希运算,得到第一哈希值;
所述分区确定子单元,用于将排序序号等于所述第一哈希值的分区,作为所述待查询数据在kafka系统中所在的第一分区。
在一个可能的设计中:
所述获取单元,还用于获取所述第一分区对应bitmap中任一bitmap内bit位的总位数,其中,所述第一分区对应bitmap中每个bitmap内bit位的总位数相同;
所述计算子单元,还用于根据所述总位数,对所述第一关键字符进行第二哈希运算,得到所述第一查询值。
在一个可能的设计中:
所述计算子单元,具体利用非加密散列函数,得到所述第一关键字符的哈希数;
所述计算子单元,具体将所述哈希数与所述总位数进行取余运算,得到所述哈希数与所述总位数的余数;
所述计算子单元,还具体将所述余数作为所述第一查询值。
在一个可能的设计中,所述装置还包括:数据清空单元;
所述数据清空单元,用于每隔预设时间间隔,将kafka系统中每个分区对应bitmap中的每个bitmap内所有bit位的值置为0;
所述数据清空单元,还用于所述根据kafka系统中每个分区内的每个已存储数据的第二关键字符,计算每个已存储数据的第二查询值,并将每个已存储数据所在分段文件对应bitmap中与所述第二查询值对应bit位的值置1,以完成对应bitmap的更新。
在一个可能的设计中,所述装置还包括:数据存储单元;
所述获取单元,还用于获取待存储数据的第三关键字符;
所述数据存储单元,用于根据所述第三关键字符,得到所述待储存数据在kafka系统中的第三分区,以及所述待存储数据在所述第三分区中的第三查询值;
所述数据存储单元,还用于将所述待存储数据存储至所述第三分区中的分段文件内,并将与所述分段文件对应bitmap中与所述第三查询值对应bit位的值置为1,以便在有所述待查询数据时,根据前述第一方面所述的数据查询方法进行数据查询。
第三方面,本发明提供了另一种kafka数据的查询装置,以装置为计算机主设备为例,包括依次通信相连的存储器、处理器和收发器,其中,所述存储器用于存储计算机程序,所述收发器用于收发消息,所述处理器用于读取所述计算机程序,执行如第一方面或第一方面中任意一种可能设计的所述kafka数据的查询方法。
第四方面,本发明提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,当所述指令在计算机上运行时,执行如第一方面或第一方面中任意一种可能设计的所述kafka数据的查询方法。
第五方面,本发明供了一种包含指令的计算机程序产品,当所述指令在计算机上运行时,使所述计算机执行如第一方面或第一方面中任意一种可能设计的所述kafka数据的查询方法。
附图说明
图1为本发明提供的kafka数据的查询方法的步骤流程示意图;
图2为本发明提供的数据存储方法的步骤流程示意图;
图3为本发明提供的kafka数据的查询装置的结构示意图;
图4为本发明提供的计算机主设备的结构示意图。
具体实施方式
下面结合附图及具体实施例来对本发明作进一步阐述。在此需要说明的是,对于这些实施例方式的说明虽然是用于帮助理解本发明,但并不构成对本发明的限定。本文公开的特定结构和功能细节仅用于描述本发明的示例实施例。然而,可用很多备选的形式来体现本发明,并且不应当理解为本发明限制在本文阐述的实施例中。
应当理解,尽管本文可能使用术语第一、第二等等来描述各种单元,但是这些单元不应当受到这些术语的限制。这些术语仅用于区分一个单元和另一个单元。例如可以将第一单元称作第二单元,并且类似地可以将第二单元称作第一单元,同时不脱离本发明的示例实施例的范围。
应当理解,对于本文中可能出现的术语“和/或”,其仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,单独存在B,同时存在A和B三种情况;对于本文中可能出现的术语“/和”,其是描述另一种关联对象关系,表示可以存在两种关系,例如,A/和B,可以表示:单独存在A,单独存在A和B两种情况;另外,对于本文中可能出现的字符“/”,一般表示前后关联对象是一种“或”关系。
实施例
在阐述本发明的方案前,首先阐述kafka系统的基本概念:
Kafka是一种高吞吐量的分布式发布订阅消息系统,是由Apache基金会维护的一个开源流处理平台,核心代码主要是通过java与scala编写;通常情况下,kafka适用于日志收集、消息系统、用户活动跟踪、运用指标监控以及流式处理等场景,且由于其具有优秀的高吞吐的优点,而被广泛运用于大数据场景下的消息系统。
Kafka系统中的存储结构为:kafka系统中设置有多个topic(消息集合),每个消息集合又包含若干个Partition(分区),而每个分区内也包括若干个Segmentfile(分段文件);现有需要查询存储在kafka系统中的数据时,只能从头到尾遍历,即需要遍历每个分区以及每个分区内的分段文件,直至查找到待查询的数据为止,所以则会导致查询效率非常低下;因此,本实施例则提供一种查询方法,以解决现有技术存在的查询效率低下的问题。
本实施例第一方面所提供的kafka数据的查询方法,可利用待查询数据的第一关键字符确定其在kafka系统中的存储区域(即第一分区),以及其在第一分区中的第一查询值,其实质作用为:利用第一查询值得到第一分区对应bitmap中每个bitmap内与第一查询值对应_的bit位,从而通过判断与第一查询值对应的bit位的值是否为1,从而来排除第一分区内一定不存储有该待查询数据的分段文件;因此,本方法即可实现第一分区内分段文件的过滤,从而减少在查询时所遍历的文件;由此,即可在查询时避免遍历kafka系统中每个分区以及每个分段文件,进而提高查询效率。
如图1所示,本实施例第一方面所提供的kafka数据的查询方法,可以但不限于包括如下步骤S101~S104。
S101.获取待查询数据的第一关键字符。
步骤S101则是获取待查询数据的第一关键字符的过程,以便后续根据该第一关键字符确定待查询数据所在的存储区域(即第一分区),以及存储区域中需要进行遍历的分段文件,以完成数据的查找。
在本实施例中,举例待查询数据的第一关键字符是其在存储至kafka系统时得到,可以但不限于:由用户在进行数据储存时,进行预设,且在存储时以日志文件发送至用户终端、服务器或保存在本地,以便后续进行数据查询时,能够查找到对应待查询数据的第一关键字符。
在本实施例中,第一关键字符可以但不限于为:在待查询数据存储至kafka系统前,从待查询数据中提取一串表征数据内容的字符串作为第一关键字符;当然,也可以在存储时,由用户手动为每个待查询数据添加第一关键字符。
在获取到待查询数据的第一关键字符后,即可利用第一关键字符确定待查询数据在kafka系统中的存储区域以及对应的查询值,如以下步骤S102所示。
S102.根据所述第一关键字符,确定所述待查询数据在kafka系统中所在的第一分区,以及所述待查询数据在所述第一分区中的第一查询值。
步骤S102则是利用第一关键字符,来确定该待查询数据在kafka系统中的存储区域;由于kafka系统中会存在多个消息集合(即Topic),每个消息集合又包含若干个分区(所有分区区域均是按照从小到大的数字进行排序),而每个分区内也包括若干个分段文件(每个分段文件中存储多条数据);因此,在利用第一关键字符确定存储区域(即第一分区)后,可减少查询的分区,从而提高查找效率。
而第一查询值,则用于确定第一分区中各个分段文件对应bitmap内的bit位,以便通过判断bitmap中与第一查询值对应bit位的值是否为1,来得知对应分段文件内是否存储有该待查询数据;即与第一查询值对应bit位的值为1,则说明对应分段文件内存储有该待查询数据;反之,若为0,则说明对应分段文件内未存储有该待查询数据;因此;在查找时,只需要通过判断与第一查询值对应bit位的值否为1,来确定对应分段文件内是否存储有待查询数据,从而只在与第一查询值对应bit位的值为1的bitmap对应的分段文件内进行数据的查找,即本实施例可过滤掉第一分区内一定未存储有待查询数据的分段文件,从而减少遍历的文件个数,以提高查询效率。
另外,由于bitmap是在内存中进行数据的存储,且能够支持到对每个bit位的数据进行操作;因此,相较于从kafka系统中读取数据,其在bitmap中读取数据速度更快(kafka系统中的数据存储在磁盘中),所以,通过读取bitmap中bit位的值,来判断对应分段分件中是否存储有待查询数据,可从数据读取速度上,来提高查询效率。
由此通过前述设计,即可实现待查询数据在kafka系统中的精确定位,从而减少遍历的分区个数以及分段文件个数,达到提高查询效率的目的。
下述提供根据第一关键字符,确定待查询数据在kafka系统中所在的第一分区的具体过程,可以但不限于包括如下步骤S102a~S102c。
S102a.获取所述kafka系统中的分区个数,以及每个分区对应的排序序号。
S102b.根据所述分区个数,对所述第一关键字符进行第一哈希运算,得到第一哈希值。
S102c.将排序序号等于所述第一哈希值的分区,作为所述待查询数据在kafka系统中所在的第一分区。
步骤S102a~S102c的原理实质为:计算第一关键字符的哈希值,来确定对应待查询数据的存储区域,下述以一个实例来进行阐述:
假设kafka系统中的分区总个数为10000个,即每个分区的序号则是从1到10000。
举例待查询数据为某个电梯中多媒体设备的属性信息,可以但不限于包括:设备编号、机型、安装电梯位置、安装电梯编号以及维护人员信息等;而举例第一关键字符为属性信息中的设备编号,举例可以但不限于为:QWEADC123456123。
那么根据步骤S102b,则需要根据分区个数(即10000),对第一关键字符进行第一哈希运算,下述提供一种第一哈希运算的具体计算方法:
首先,利用非加密散列函数,得到第一关键字符的哈希数,即利用非加密散列函数对第一关键字符进行哈希变换,得到其对应的哈希数;假设第一关键字符QWEADC123456123的哈希数为:56421564861231。
然后,使用第一关键字符的哈希数除以分区个数,取结果的余数,将余数作为第一哈希值;即用56421564861231除以10000,取二者的余数,即余数为1231,那么第一哈希值则为1231。
最后,根据步骤S102c,即可将排序序号为第1231号的分区,作为前述多媒体设备的属性信息的存储区域,即前述属性信息存储在第1231号分区中。
通过前述设计,在查找时,即可利用第一关键字符确定数据的存储区域,从而缩小查询范围,从而避免在查询时需要遍历kafka系统中所有分区的问题,进而提高了查找效率。
同理,下述提供根据第一关键字符,确定待查询数据在第一分区中的第一查询值的具体方法,可以但不限于包括如下步骤S102d~S102e。
S102d.获取所述第一分区对应bitmap中任一bitmap内bit位的总位数,其中,所述第一分区对应bitmap中每个bitmap内bit位的总位数相同。
S102e.根据所述总位数,对所述第一关键字符进行第二哈希运算,得到所述第一查询值。
步骤S102d~S102e的计算原理与前述步骤S102a~S102c原理一致,即:先获取第一分区中任一bitmap内bit位的总位数,然后再根据总位数,对第一关键字符进行第二哈希运算,所得到的结果则为第二查询值。
当然,步骤S102e中进行第二哈希运算的过程与前述步骤S102b一致,即先利用非加密散列函数,得到第一关键字符的哈希数,然后再将哈希数与所述总位数进行取余运算,得到所述哈希数与所述总位数的余数;而余数则作为第一查询值。
在前述举例的基础上,进行前述步骤S102d~S102e的原理阐述:
即待查询数据的第一关键字符依然是:QWEADC123456123;利用非加密散列函数,对其进行哈希变换,得到的哈希数依然为:56421564861231;其存储在第1231号分区的分段文件内。
假设第1231号分区内任一bitmap内bit位的总位数为100000(在本实施例中,bitmap中bit位的总位数可根据使用环境和使用需求而由用户进行预设),那么使用56421564861231除以100000得到的余数为61231;因此,待查询数据在第1231号分区内的第一查询值则为61231。
在本实施例中,为了使待查询数据的第一查询值(也就是第一关键字符经第二哈希运算得到的哈希值)能够较好的散列在其所在分段文件对应的bitmap上,可以但不限于设置bitmap中bit位的总位数为对应分段文件中数据条数的5-10倍。
在得到待查询数据所在的第一分区以及第一查询值后,即可利用第一查询值得到第一分区对应bitmap中每个bitmap内与第一查询值对应bit位的值是否为1,从而来排除第一分区内一定不存储有该待查询数据的分段文件,以实现第一分区内分段文件的过滤,如以下步骤S103所示。
S103.判断所述第一分区对应bitmap中每个bitmap内与所述第一查询值对应bit位的值是否为1,以确定出n个bitmap,其中,所述n个bitmap中的每个bitmap内与所述第一查询值对应的bit位的值为1,且n为大于或等于1的整数。
在本实施例中,由于数据的发送可能不止一条,即可能发送的为一个消息队列,那么同一消息队列内的所有消息数据对应的第一关键字符均为同一个;因此,为了避免在进行数据查找时,出现数据的漏查询,需要判断第一分区内所有bitmap内与第一查询值对应的bit位的值是否为1,以便保证能够筛选出所有存储有待查询数据的分段文件,以保证数据查找的全面性。
还是在前述举例的基础,来阐述步骤S103:第一分区为第1231号分区,第一查询值为61231;因此,则需要判断第1231号分区内所有bitmap内第61231bit位的值是否为1,若为1,则说明对应bitmap对应的分段文件内存储有该待查询数据;若为0,则说明对应bitmap对应的分段文件内未存储有该待查询数据;因此,在本实施例中,需要提取出第61231bit位的值为1的bitmap,以便在前述提取出的bitmap对应分段文件内进行待查询数据的查找。
通过步骤S103,即可实现第一分区内未存储有待查询数据的分段文件的过滤,以减少查询文件量,从而提高查询效率。
在提取从第一分区中提取出n个bitmap后,即可在这n个bitmap中进行数据的查找,如步骤S104所示。
S104.从所述n个bitmap对应的分段文件中提取出所述待查询数据。
例如,从前述第一分区中提取出10个bitmap,那么则需要在这10个bitmap对应的分段文件中进行查找;而查找的规则可以但不限于为:只要对应分段文件中的kafka数据内存在第一关键字符,则将该kafka数据作为待查询数据。
由此通过前述步骤S101~S104及其子步骤所详细阐述的kafka数据的查询方法,本发明可利用待查询数据的第一关键字符,来确定其在kafka系统中所在的第一分区,从而缩小查询范围;同时还可通过判断第一分区对应bitmap中每个bitmap内与第一查询值对应bit位的值是否为1,从而来排除第一分区内一定不存储有该待查询数据的分段文件;因此,本发明可在查询时避免遍历kafka系统中每个分区以及每个分段文件,进而提高查询效率。
另外,由于kafka系统中的数据具有时效性,因此,为了避免因kafka系统中的数据失效,而导致对应bitmap中数据的失效,所以,在本实施例中,需要定期清除kafka系统中过期数据在对应的bitamap中的数据,以保证数据的时效性,其实现步骤如以下步骤S105和步骤S106所示。
S105.每隔预设时间间隔,将kafka系统中每个分区对应bitmap中的每个bitmap内所有bit位的值置为0。
S106.根据kafka系统中每个分区内的每个已存储数据的第二关键字符,计算每个已存储数据的第二查询值,并将每个已存储数据所在分段文件对应bitmap中与所述第二查询值对应bit位的值置1,以完成对应bitmap的更新。
步骤S105和步骤S106的原理为:由用户设定时间间隔,即每隔预设时间间隔(例如24小时)将kafka系统中每个分区内每个bitmap的bit位的值置为0,然后,在按照前述步骤S102中的计算方法,重新计算在预设时间间隔后,每个分区内未失效的每个已存储数据的第二查询值,以将每个已存储数据所在分段文件对应bitmap中与第二查询值对应bit位的值置1,从而完成对应bitmap的更新。
通过前述设计,即可定期清空kafka系统中每个bitmap内的数据(即清空每个bit位的值,将其重新置为0,并根据步骤S106,将每个分区中未失效的已存储数据的第二查询值对应的bit位的值重新置1),从而保证数据的时效性,为后续数据查找提供准确索引。
如图2所示,下述提供一种数据的存储方法,即前述第一方面中的查询方法则是建立在该存储方法上的,可以但不限于包括如下步骤S201~S203。
S201.获取待存储数据的第三关键字符。
步骤S201则是获取需要进行存储的数据的关键字符的过程,以便后续在存储时确定其在kafka系统中的存储区域(即第三分区),以及第三查询值。
在本实施例中,其是由用户在存储前进行预设,可以但不限于为:在待存储数据中提取一串表征数据内容的字符串作为第三关键字符,并将待存储数据的第三关键字符整理成日志文件,发送至用户终端、服务器或保存在本地,以便后续进行数据查询时,可获取需要查询的数据的关键字符,从而实现精确查找。
S202.根据所述第三关键字符,得到所述待储存数据在kafka系统中的第三分区,以及所述待存储数据在所述第三分区中的第三查询值。
步骤S102根据第三关键字符得到待存储数据在kafka系统中的第三分区以及第三查询值的方法与前述步骤S102中的计算方法一致,于此不多加赘述。
S203.将所述待存储数据存储至所述第三分区中的分段文件内,并将与所述分段文件对应bitmap中与所述第三查询值对应bit位的值置为1,以便在有所述待查询数据时,根据前述第一方面所述的kafka数据的查询方法进行数据查询。
步骤S203则是存储的过程,即将待存储数据存储至第三分区内的分段文件内。
例如,在前述举例的基础上,根据第三关键字符和分区个数得到的第三分区为第1231号分区,那么待存储数据则存储在第1231号分区中的分段文件内。
下述阐述kafka系统进行数据存储的规则:由于前述就已阐述,一个分区内会有多个分段文件,而每个分段文件内包含有多条数据,其中,每个分段文件也是按照序号编号,因此,在进行数据存储时,是按照存储数据的先后顺序,依次存储在分段文件中,且当分段文件中的数据条数满足预设值时,则存储至下一排序的存储单元中。
例如,一个分区中有10个分段文件,每个分段文件只能存储10条数据,若第一分段文件内的数据已满,那么待存储数据则存储至第二个分段文件内,若第二个分段文件内的数据已满,那么则存储至第三个分段文件内,以此类推,直到完成数据的存储。
因此,在锁定了查询分区后,要进一步的提高数据查找效率,则需要在查找时进行分段文件的过滤,排除一定不存在有待查询数据的文件;而本实施例,则是通过为每一个分段文件配置一个bitmap的方法来实现后续查找时文件的过滤;即当待存储数据存储至第三分区中的分段文件内时,将与分段文件对应bitmap中与第三查询值对应bit位的值置为1,从而来表示该分段文件内存储有待存储数据。
在本实施例中,bitmap是Redis(远程字典服务)的一种存储结构,它会在内存中开辟指定长度的内存,并且能够支持到对每个位的数据进行操作,可轻松应对十亿长度级别的场景;因此,即可利用bitmap中的每个bit位的值是1还是0,来表示对应分段文件中是否存储有数据,即若一个bitmap中与第三查询值对应bit位的值为1,则说明该bitmap对应的分段文件内存储了待存储数据,反之,若为0,则说明该bitmap对应的分段文件内一定未存储有待存储数据;如此,即可在后续查找时,利用待查询数据的第一查询值,来确定bitmap内与第一查询值对应bit位的值是否为1,从而判断出对应分段文件内是否存储有待查询数据,以实现分段文件的过滤,大大提高查找效率的目的。
由此通过前述存储方法,即可为第一方面中的查询方法提供精确的查询索引,从而提高查找效率。
如图3所示,本实施例第二方面提供了一种实现实施例第一方面所述的kafka数据的查询方法或第二方面中所述的数据存储方法的硬件装置,包括:获取单元、存储信息查找单元、判断单元以及数据查找单元。
所述获取单元,用于获取待查询数据的第一关键字符。
所述存储信息查找单元,用于根据所述第一关键字符,确定所述待查询数据在kafka系统中所在的第一分区,以及所述待查询数据在所述第一分区中的第一查询值。
所述判断单元,用于判断所述第一分区对应bitmap中每个bitmap内与所述第一查询值对应bit位的值是否为1,以确定出n个bitmap,其中,所述n个bitmap中的每个bitmap内与所述第一查询值对应的bit位的值为1,且n为大于或等于1的整数。
所述数据查找单元,用于从所述n个bitmap对应的分段文件中提取出所述待查询数据。
在一个的可能的设计中,所述存储信息查找单元包括:计算子单元以及分区确定子单元。
所述获取单元,还用于获取所述kafka系统中的分区个数,以及每个分区对应的排序序号。
所述计算子单元,用于根据所述分区个数,对所述第一关键字符进行第一哈希运算,得到第一哈希值。
所述分区确定子单元,用于将排序序号等于所述第一哈希值的分区,作为所述待查询数据在kafka系统中所在的第一分区。
在一个可能的设计中:
所述获取单元,还用于获取所述第一分区对应bitmap中任一bitmap内bit位的总位数,其中,所述第一分区对应bitmap中每个bitmap内bit位的总位数相同。
所述计算子单元,还用于根据所述总位数,对所述第一关键字符进行第二哈希运算,得到所述第一查询值。
在一个可能的设计中:
所述计算子单元,具体利用非加密散列函数,得到所述第一关键字符的哈希数。
所述计算子单元,具体将所述哈希数与所述总位数进行取余运算,得到所述哈希数与所述总位数的余数。
所述计算子单元,还具体将所述余数作为所述第一查询值。
在一个可能的设计中,所述装置还包括:数据清空单元。
所述数据清空单元,用于每隔预设时间间隔,将kafka系统中每个分区对应bitmap中的每个bitmap内所有bit位的值置为0。
所述数据清空单元,还用于所述根据kafka系统中每个分区内的每个已存储数据的第二关键字符,计算每个已存储数据的第二查询值,并将每个已存储数据所在分段文件对应bitmap中与所述第二查询值对应bit位的值置1,以完成对应bitmap的更新。
在一个可能的设计中,所述装置还包括:数据存储单元。
所述获取单元,还用于获取待存储数据的第三关键字符。
所述数据存储单元,用于根据所述第三关键字符,得到所述待储存数据在kafka系统中的第三分区,以及所述待存储数据在所述第三分区中的第三查询值。
所述数据存储单元,还用于将所述待存储数据存储至所述第三分区中的分段文件内,并将与所述分段文件对应bitmap中与所述第三查询值对应bit位的值置为1,以便在有所述待查询数据时,根据前述第一方面所述的数据查询方法进行数据查询。
本实施例提供的装置的工作过程、工作细节和技术效果,可以参见实施例第一方面或第二方面,于此不再赘述。
如图4所示,本实施例第三方面提供了一种计算机主设备,包括:依次通信相连的存储器、处理器和收发器,其中,所述存储器用于存储计算机程序,所述收发器用于收发消息,所述处理器用于读取所述计算机程序,执行如实施例第一方面所述的kafka数据的查询方法或第二方面中所述的数据存储方法。
具体举例的,所述存储器可以但不限于包括随机存取存储器(random accessmemory,RAM)、只读存储器(Read Only Memory image,ROM)、闪存(Flash Memory)、先进先出存储器(First Input First Output,FIFO)和/或先进后出存储器(First In Last Out,FILO)等等;所述处理器可以不限于采用型号为STM32F105系列的微处理器、精简指令集计算机(reduced instruction set computer,RSIC)微处理器、X86等架构处理器或集成嵌入式神经网络处理器(neural-network processing units,NPU)的处理器;所述收发器可以但不限于为无线保真(WIFI)无线收发器、蓝牙无线收发器、通用分组无线服务技术(General Packet Radio Service,GPRS)无线收发器、紫蜂协议(基于IEEE802.15.4标准的低功耗局域网协议,ZigBee)无线收发器、3G收发器、4G收发器和/或5G收发器等。此外,所述装置还可以但不限于包括有电源模块、显示屏和其它必要的部件。
本实施例提供的计算机主设备的工作过程、工作细节和技术效果,可以参见实施例第一方面或第二方面,于此不再赘述。
本实施例第四方面提供了一种存储包含有实施例第一方面所述的kafka数据的查询方法或第二方面中所述的数据存储方法的指令的计算机可读存储介质,即所述计算机可读存储介质上存储有指令,当所述指令在计算机上运行时,执行如实施例第一方面所述的kafka数据的查询方法或第二方面中所述的数据存储方法。
其中,所述计算机可读存储介质是指存储数据的载体,可以但不限于包括软盘、光盘、硬盘、闪存、优盘和/或记忆棒(Memory Stick)等,所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。
本实施例提供的计算机可读存储介质的工作过程、工作细节和技术效果,可以参见实施例第一方面或第二方面,于此不再赘述。
本实施例第五方面提供了一种包含指令的计算机程序产品,当所述指令在计算机上运行时,使所述计算机执行如实施例第一方面所述的kafka数据的查询方法或第二方面中所述的数据存储方法,其中,所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
- 上一篇:石墨接头机器人自动装卡簧、装栓机
- 下一篇:一种数据处理方法及装置