数据检索的方法及服务器转让专利

申请号 : CN201610749786.6

文献号 : CN106339183B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 于明光纪勇

申请人 : 东软集团股份有限公司

摘要 :

本发明公开了一种数据检索的方法及服务器,用以解决数据检索时JVM服务器的堆内内存溢出的技术问题。所述方法包括:获取检索用的关键字;根据所述关键字在存储设备中分页检索数据对象,其中,针对每页数据对象执行以下操作:将具有所述关键字的数据对象的唯一标识依次存储到堆内内存中;当所述堆内内存中存储的所述唯一标识的数目达到阈值时,将所述堆内内存中存储的所述唯一标识存入堆外内存,并删除所述堆内内存中存储的所述唯一标识。本发明实施例用于数据检索。

权利要求 :

1.一种数据检索的方法,其特征在于,所述方法应用于运行Java虚拟机JVM的服务器,所述服务器包括JVM的堆内内存以及堆外内存,所述方法包括:所述服务器获取检索用的关键字;

根据所述关键字在存储设备中分页检索数据对象,其中,所述存储设备中每页包括N个数据对象,针对每页数据对象执行以下操作:将具有所述关键字的数据对象的唯一标识依次存储到所述堆内内存中;其中,所述唯一标识用于在所述存储设备中直接查询对应的数据对象;

当所述堆内内存中存储的所述唯一标识的数目达到阈值时,将所述堆内内存中存储的所述唯一标识存入所述堆外内存,并删除所述堆内内存中存储的所述唯一标识;其中,所述当所述堆内内存中存储的所述唯一标识的数目达到阈值时,将所述堆内内存中存储的所述唯一标识存入所述堆外内存,包括:在分页检索到N个具有所述关键字的数据对象后,将所述堆内内存中的所述N个数据对象的唯一标识存入所述堆外内存中;

所述方法还包括:根据所述堆外内存中的N个所述唯一标识读取所述存储设备中的N个数据对象;加载并显示所述N个数据对象。

2.根据权利要求1所述的方法,其特征在于,在根据所述关键字在存储设备中分页检索数据对象之前,所述方法还包括:对所述存储设备中所有的数据对象进行分页。

3.根据权利要求1所述的方法,其特征在于,所述方法还包括:对所述服务器的存储空间进行划分,以分配所述堆外内存的存储空间。

4.一种服务器,其特征在于,所述服务器运行Java虚拟机JVM,所述服务器包括JVM的堆内内存以及堆外内存,所述服务器还包括:获取单元,用于获取检索用的关键字;

检索单元,用于根据所述关键字在存储设备中分页检索数据对象,其中,所述存储设备中每页包括N个数据对象;

存储单元,用于将具有所述关键字的数据对象的唯一标识依次存储到所述堆内内存中;其中,所述唯一标识用于在所述存储设备中直接查询对应的数据对象;

确定单元,用于确定所述检索单元分页检索到N个具有所述关键字的数据对象;

所述存储单元还用于,将所述堆内内存中的所述N个数据对象的唯一标识存入所述堆外内存中;

删除单元,用于删除所述堆内内存中存储的所述唯一标识;

读取单元,用于根据所述堆外内存中的N个所述唯一标识读取所述存储设备中的N个数据对象;

显示单元,用于加载并显示所述N个数据对象。

5.根据权利要求4所述的服务器,其特征在于,还包括:分页单元,用于在所述检索单元根据所述关键字在存储设备中分页检索数据对象之前,对所述存储设备中所有的数据对象进行分页。

6.根据权利要求4所述的服务器,其特征在于,还包括:分配单元,用于分配所述堆外内存的存储空间。

说明书 :

数据检索的方法及服务器

技术领域

[0001] 本发明涉及数据检索领域,具体地,涉及一种数据检索的方法及服务器。

背景技术

[0002] JVM(Java Virtual Machine,Java虚拟机)是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。在大型的服务平台中,内部可能存在大量JVM服务器,用于对该平台的应用进行监控,收集各类应用产生的数据,并通过对各类数据进行分析,当发现应用的行为不符合预期或出现异常时及时告警,以便维护人员对问题进行处理,排除故障或潜在的问题。
[0003] 现有技术中,JVM服务器在对磁盘中存储的数据进行检索时,是将磁盘中所有符合条件的数据存储到JVM服务器的堆内内存中,由于JVM的堆内内存的容量较小,因此,在对大数据进行检索时,容易造成内存溢出。

发明内容

[0004] 本发明的目的是提供一种数据检索的方法及服务器,用以解决数据检索时JVM服务器的堆内内存溢出的技术问题。
[0005] 为了实现上述目的,本发明第一方面,提供一种数据检索方法,所述方法应用于运行Java虚拟机JVM的服务器,所述服务器包括JVM的堆内内存以及堆外内存,所述方法包括:
[0006] 所述服务器获取检索用的关键字;
[0007] 根据所述关键字在存储设备中分页检索数据对象,其中,针对每页数据对象执行以下操作:
[0008] 将具有所述关键字的数据对象的唯一标识依次存储到所述堆内内存中;其中,所述唯一标识用于在所述存储设备中直接查询对应的数据对象;
[0009] 当所述堆内内存中存储的所述唯一标识的数目达到阈值时,将所述堆内内存中存储的所述唯一标识存入所述堆外内存,并删除所述堆内内存中存储的所述唯一标识。
[0010] 可选地,所述存储设备中每页包括N个数据对象;
[0011] 所述当所述堆内内存中存储的所述唯一标识的数目达到阈值时,将所述堆内内存中存储的所述唯一标识存入所述堆外内存,包括:
[0012] 在分页检索到N个具有所述关键字的数据对象后,将所述堆内内存中的所述N个数据对象的唯一标识存入所述堆外内存中。
[0013] 可选地,所述方法还包括:
[0014] 根据所述堆外内存中的N个所述唯一标识读取所述存储设备中的N个数据对象;
[0015] 加载并显示所述N个数据对象。
[0016] 可选地,在根据所述关键字在存储设备中分页检索数据对象之前,所述方法还包括:
[0017] 对所述存储设备中所有的数据对象进行分页。
[0018] 可选地,所述方法还包括:
[0019] 对所述服务器的存储空间进行划分,以分配所述堆外内存的存储空间。
[0020] 第二方面,提供一种服务器,所述服务器运行Java虚拟机JVM,所述服务器包括JVM的堆内内存以及堆外内存,所述服务器还包括:
[0021] 获取单元,用于获取检索用的关键字;
[0022] 检索单元,用于根据所述关键字在存储设备中分页检索数据对象;
[0023] 存储单元,用于将具有所述关键字的数据对象的唯一标识依次存储到所述堆内内存中;其中,所述唯一标识用于在所述存储设备中直接查询对应的数据对象;
[0024] 确定单元,用于确定所述堆内内存中存储的所述唯一标识的数目达到阈值;
[0025] 所述存储单元还用于,将所述堆内内存中存储的所述唯一标识存入所述堆外内存;
[0026] 删除单元,用于删除所述堆内内存中存储的所述唯一标识。
[0027] 可选地,所述存储设备中每页包括N个数据对象;
[0028] 所述确定单元用于,确定所述检索单元分页检索到N个具有所述关键字的数据对象;
[0029] 所述存储单元用于,将所述堆内内存中的所述N个数据对象的唯一标识存入所述堆外内存中。
[0030] 可选地,还包括:
[0031] 读取单元,用于根据所述堆外内存中的N个所述唯一标识读取所述存储设备中的N个数据对象;
[0032] 显示单元,用于加载并显示所述N个数据对象。
[0033] 可选地,还包括:
[0034] 分页单元,用于在所述检索单元根据所述关键字在存储设备中分页检索数据对象之前,对所述存储设备中所有的数据对象进行分页。
[0035] 可选地,所述服务器还包括:
[0036] 分配单元,用于分配所述堆外内存的存储空间。
[0037] 采用上述技术方案,服务器在存储设备中分页检索数据,在服务器的JVM堆内内存中存储的数据对象唯一标识达到一定数目时,将该数据对象的唯一标识存储到堆内内存中,并且删除堆内内存中存储的唯一标识。相比现有技术在数据检索时将存储设备中所有数据读取到堆内内存,本发明分页检索数据每次只用读取一页数据对象到堆内内存,避免了内存溢出。并且,相比现有技术,数据对象的唯一标识存储的位置由堆内内存变为堆外内存,同样避免了检索的数据量过大造成堆内内存的溢出。
[0038] 具体地,本发明的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

[0039] 附图是用来提供对本发明的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明,但并不构成对本发明的限制。在附图中:
[0040] 图1是本发明实施例提供的一种现有的数据检索的系统架构示意图;
[0041] 图2是基于图1所示的系统架构提供的一种数据检索的方法的流程示意图;
[0042] 图3是本发明实施例提供的一种数据检索的方法的流程示意图;
[0043] 图4是本发明实施例提供的一种数据检索的系统架构示意图;
[0044] 图5是基于图4所示的系统架构提供的一种数据检索的方法的流程示意图;
[0045] 图6A是本发明实施例提供的一种服务器的结构示意图;
[0046] 图6B是本发明实施例提供的另一种服务器的结构示意图。

具体实施方式

[0047] 以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
[0048] 为了使本领域的技术人员更容易理解本发明实施例相比现有技术所具有的改进,下面首先对现有技术的数据检索方法进行简单介绍。
[0049] 图1示出了现有的系统架构,包括服务器10,该服务器10运行Java虚拟机JVM 101以及JVM的堆内内存102。该系统架构还包括与该服务器10相连的存储设备11。其中,该存储设备11可以是磁盘,其存储有数据对象。
[0050] 基于图1所示的系统架构,现有技术中的数据检索流程如图2所示,包括:
[0051] S201、服务器获取用于检索的关键字。
[0052] 值得说明的是,存储设备中的数据对象包括多个属性信息。例如,在数据对象为用户的情况下,该数据对象可能包括该用户的姓名,出生日期,身份证号码等多个信息。上述步骤S201中所述的关键字可以是数据对象的任一属性信息,例如,用户的出生日期。
[0053] S202、该服务器根据该关键字在该存储设备存储的所有数据对象中进行检索。
[0054] S203、该服务器将具有该关键字的所有数据对象存储在堆内内存中。
[0055] 由上述流程可知,现有技术中将检索结果均存储在堆内内存中,这样,在检索的数据量较大时,易造成堆内内存溢出,并且堆内内存读写的速率较低,影响了检索效率。上述问题都将在本发明实施例中得到解决,下面对本发明实施例进行详细说明。
[0056] 本发明实施例提供一种数据检索方法,该方法应用于服务器,该服务器运行有JVM,并且该服务器包括堆内内存以及堆外内存,如图3所示,该方法包括:
[0057] S301、该服务器获取检索用的关键字。
[0058] 其中,该检索用的关键字可以是服务器获取到的用户输入的关键字。仍然以用户作为数据对象进行举例,若用户输入出生日期1990年至1995年,则该服务器将对存储设备中存储的所有出生日期在1990年至1995年之间的用户进行检索。
[0059] 上述只是举例说明,在具体实施时,存储设备中可以存储其他类型的对象数据,检索用的关键字也可以是其他关键字,本发明对此不做限定。
[0060] S302、该服务器根据该关键字在存储设备中分页检索数据对象。
[0061] 分页检索是指对存储设备中的每一页数据对象依次进行检索。其中,每一页数据对象的数目可以跟检索结果的显示相关。例如,检索结果在网页中只能一次显示20条,则存储设备中每一页的数据对象数目即可以为20。
[0062] 进一步地,在分页检索过程中,针对每页数据对象执行以下步骤S303至步骤S304。
[0063] S303、该服务器将具有所述关键字的数据对象的唯一标识依次存储到该堆内内存中。
[0064] 其中,所述唯一标识用于在所述存储设备中直接查询对应的数据对象。
[0065] S304、该服务器在该堆内内存中存储的所述唯一标识的数目达到阈值时,将该堆内内存中存储的所述唯一标识存入该堆外内存,并删除该堆内内存中存储的所述唯一标识。
[0066] 采用上述技术方案,服务器在存储设备中分页检索数据,在服务器的JVM堆内内存中存储的数据对象唯一标识达到一定数目时,将该数据对象的唯一标识存储到堆内内存中,并且删除堆内内存中存储的唯一标识。相比现有技术在数据检索时将存储设备中所有数据读取到堆内内存,本发明分页检索数据每次只用读取一页数据对象到堆内内存,避免了内存溢出。并且,相比现有技术,数据对象的唯一标识存储的位置由堆内内存变为堆外内存,同样避免了检索的数据量过大造成堆内内存的溢出。并且,堆外内存相比堆内内存在读写数据时的速率更快,也就是说,本发明实施例还可以提高数据检索的效率。
[0067] 为了使本领域的技术人员更加理解本发明实施例提供的技术方案,下面对上述步骤进行详细的说明。
[0068] 具体地,堆外内存可以是服务器在初始状态下申请的存储空间,即在上述步骤S301之前,所述方法还包括:对所述服务器的存储空间进行划分,以分配所述堆外内存的存储空间。
[0069] 其中,堆外内存的存储空间的具体大小可以根据实际需求进行设定,其中,堆外内存相比堆内内存更易扩展,因此,本发明实施例也可以在后续的操作中,扩展堆外内存的存储空间。
[0070] 进一步地,若存储设备中的数据对象未分页,本发明实施例在步骤S302之前还可以对该存储设备中所有的数据对象进行分页。
[0071] 其中,在存储设备中每页包括N个数据对象的情况下,上述步骤S304具体包括:在分页检索到N个具有所述关键字的数据对象后,将该堆内内存中的所述N个数据对象的唯一标识存入该堆外内存中,并删除该堆内内存中存储的唯一标识。
[0072] 也就是说,堆内内存中每存储满N条数据对象的唯一标识,服务器即将堆内内存中存储的唯一标识转移到堆外内存中存储,同时对堆内内存的存储空间进行擦除,之后进一步检索到的数据对象的唯一标识存储在擦除后的堆内内存中,如此循环。从而,每次占用堆内内存的存储空间不超过N条,避免了内存溢出。并且,每次存储到堆外内存的符合条件的数据对象的唯一标识的数目刚好为一页,有利于显示检索结果。
[0073] 另外,值得说明的是,上述数据对象的唯一标识可以是数据对象的哈希值,堆外内存中以键值key-value形式存储,以便服务器根据唯一标识key能够直接从存储设备中查询到数据对象。
[0074] 进一步地,本发明实施例提供的一种数据检索方法还包括:根据该堆外内存中的N个所述唯一标识读取该存储设备中的N个数据对象,加载并显示所述N个数据对象。
[0075] 示例地,如图4所示,本发明实施例提供的一种系统架构包括服务器40,该服务器40运行有Java虚拟机JVM,该服务器40还包括JVM的堆内内存401以及堆外内存402。该系统架构还包括与该服务器相连的存储设备41,用于存储数据对象,其中,该存储设备中的数据对象分为多页,如图4中所示的第一页至第M页,M是大于或等于2的正整数。
[0076] 基于图4所示的系统架构,本发明实施例提供的数据检索方法如图5所示,该方法包括:
[0077] S501、服务器40在初始化时,预先申请固定大小的堆外内存402的存储空间。
[0078] S502、服务器40获取检索用的关键字。
[0079] 具体参照上述对步骤S301的描述,此处不再赘述。
[0080] S503、服务器40根据该关键字在存储设备41的第一页中进行检索。
[0081] S504、服务器40将该第一页中具有该关键字的数据对象的唯一标识存储在堆内内存401中。
[0082] S505、服务器40确定堆内内存401中存储的唯一标识数目是否达到阈值。
[0083] 其中,该阈值可以是根据实际需求预先设定的。例如,根据堆内内存的空间大小进行设置。
[0084] 进一步地,若堆内内存401中存储的唯一标识数目达到该阈值,则执行步骤S506和S507,若堆内内存401中存储的唯一标识数目未达到该阈值,则执行步骤S508。
[0085] S506、服务器40将堆内内存401中存储的唯一标识存入堆外内存402中。
[0086] S507、服务器40删除堆内内存401中存储的数据对象的唯一标识。
[0087] 进一步地,执行步骤S508。
[0088] S508、服务器40根据该关键字在存储设备41的第二页中进行检索,直到检索完存储设备41中的所有数据对象。
[0089] 也就是说,参照上述步骤S503至S507,服务器40针对该第二页以后的每一页都执行相同的操作,直到将存储设备41中的所有数据对象检索完毕。
[0090] 值得说明的是,在对存储设备41中的最后一页进行检索后,若堆内内存中的唯一标识未达到该阈值,此时,服务器40也将堆内内存401中的唯一标识转移到堆外内存402存储。
[0091] S509、服务器40根据堆外内存402中的唯一标识读取存储设备41中对应该唯一标识的数据对象。
[0092] S510、服务器40加载并显示检索结果。
[0093] 采用上述方法,堆内内存中每存储满一定数量的数据对象的唯一标识,服务器即将堆内内存中存储的唯一标识转移到堆外内存中存储,同时对堆内内存的存储空间进行擦除,之后进一步检索到的数据对象的唯一标识存储在擦除后的堆内内存中,如此循环。这样,在检索无遗漏的情况下,保证了每次检索占用堆内内存的存储空间不超过阈值,从而避免了内存溢出。并且,堆外内存的读写速率高于堆内内存,因此,本发明实施例还可以提高检索效率。
[0094] 值得说明的是,对于上述方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明所必须的。
[0095] 本发明实施例还提供一种服务器60,用于实施上述方法实施例提供的一种数据检索的方法,该服务器60包括JVM的堆内内存以及堆外内存,如图6A所示,所述服务器60还包括:
[0096] 获取单元61,用于获取检索用的关键字。
[0097] 检索单元62,用于根据所述关键字在存储设备中分页检索数据对象。
[0098] 存储单元63,用于将具有所述关键字的数据对象的唯一标识依次存储到所述堆内内存中。
[0099] 其中,所述唯一标识用于在所述存储设备中直接查询对应的数据对象。
[0100] 确定单元64,用于确定所述堆内内存中存储的所述唯一标识的数目达到阈值。
[0101] 所述存储单元63还用于,将所述堆内内存中存储的所述唯一标识存入所述堆外内存。
[0102] 删除单元65,用于删除所述堆内内存中存储的所述唯一标识。
[0103] 采用上述服务器,该服务器在存储设备中分页检索数据,在服务器的JVM堆内内存中存储的数据对象唯一标识达到一定数目时,将该数据对象的唯一标识存储到堆内内存中,并且删除堆内内存中存储的唯一标识。相比现有技术在数据检索时将存储设备中所有数据读取到堆内内存,本发明分页检索数据每次只用读取一页数据对象到堆内内存,避免了内存溢出。并且,相比现有技术,数据对象的唯一标识存储的位置由堆内内存变为堆外内存,同样避免了检索的数据量过大造成堆内内存的溢出。并且,堆外内存相比堆内内存在读写数据时的速率更快,也就是说,本发明实施例还可以提高数据检索的效率。
[0104] 可选地,所述存储设备中每页包括N个数据对象;所述确定单元64用于,确定所述检索单元分页检索到N个具有所述关键字的数据对象;所述存储单元63用于,将所述堆内内存中的所述N个数据对象的唯一标识存入所述堆外内存中。
[0105] 也就是说,堆内内存中每存储满N条数据对象的唯一标识,服务器即将堆内内存中存储的唯一标识转移到堆外内存中存储,同时对堆内内存的存储空间进行擦除,之后进一步检索到的数据对象的唯一标识存储在擦除后的堆内内存中,如此循环。从而,每次占用堆内内存的存储空间不超过N条,避免了内存溢出。并且,每次存储到堆外内存的符合条件的数据对象的唯一标识的数目刚好为一页,有利于显示检索结果。
[0106] 可选地,如图6B所示,该服务器60还包括:
[0107] 读取单元66,用于根据所述堆外内存中的N个所述唯一标识读取所述存储设备中的N个数据对象;显示单元67,用于加载并显示所述N个数据对象。
[0108] 可选地,如图6B所示,该服务器60还包括:
[0109] 分页单元68,用于在所述检索单元根据所述关键字在存储设备中分页检索数据对象之前,对所述存储设备中所有的数据对象进行分页。
[0110] 可选地,如图6B所示,该服务器60还包括:
[0111] 分配单元69,用于分配所述堆外内存的存储空间。
[0112] 值得说明的是,以上对该服务器60的单元划分,仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,将上述存储单元63以及确定单元64划分为一个处理单元。并且,上述各功能单元的物理实现也可能有多种实现方式。例如,上述处理单元可以是中央处理器CPU,也可以是FPGA(Field Programmable Gate Array,现场可编程门阵列),本发明对此不做限定。
[0113] 另外,所属本领域的技术人员应该清楚地了解到,为描述的方便和简洁,上述描述的服务器的各单元的具体工作过程,可以参考前述方法实施例中的对应过程,此处不再赘述。
[0114] 在本申请所提供的实施例中,应该理解到,所公开的装置和方法,可以通过其它的方式实现。例如,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0115] 上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、RAM(Random Access Memory,随机存取存储器)、磁碟或者光盘等各种可以存储数据的介质。
[0116] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。