一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种层次数据检索方法、装置和设备与流程

2022-03-02 01:04:04 来源:中国专利 TAG:

1.本发明涉及数据检索
技术领域
,尤其涉及一种层次数据检索方法、装置和设备。
背景技术
:2.层次数据,也叫目录树,在ui上类似windows的资源管理器,指的是通过树形结构逐层存储的数据。其管理、搜索、分析是互联网业务中的常见需求,例如企业的各层级的部门及其员工以及员工之间上下级数据的管理、存储和查询;多层次商品类别、商品及相关企业和用户数据的管理和查询;物联网业务中的多层次地域及其包含的设备、设备生产企业及设备投入使用后所属的企业、用户数据的管理、搜索等,数据的层次可以有十几级甚至不限,对应的数据量可能达到百万级甚至更大。这些需求涉及到的用户及管理员(包括区域管理员)往往需要不同的数据权限。3.为此,传统的层次数据存储和搜索的方法通常是采用关系数据库mysql、oracle或microsoftsqlserver来保存层次数据;或者是采用字段记录层次关系的方式进行存储和检索查询。4.但随着亿级用户量的互联网业务的不断扩大,层次树实体数据之间的关联会的数据量会进一步增加,按照传统关系数据库理论构建的层次数据管理、搜索服务,常见的表设计方案只能循环或者递归地用java等编程语言从数据库查询,而且层次树越多,循环次数或递归的层次越深;且由于应用系统、数据库往往运行在不同的服务器上,每次访问数据库时都会经过网络通信、数据库服务器内部的处理、硬盘i/o交互等过程,在数据量和并发量较大的情况下系统响应缓慢且难以提供大规模的并发访问,从而导致层次数据的搜索效率降低,无法满足互联网业务发展需求。技术实现要素:5.本发明提供了一种层次数据检索方法、装置和设备,解决了传统的层次数据检索方法由于其架构和检索路径的限制,在亿级用户量的互联网业务搜索过程中的检索效率较低,无法满足互联网业务发展需求的技术问题。6.本发明第一方面提供的一种层次数据检索方法,包括:7.响应于任一用户端发送的登录请求,获取所述用户端对应的用户标识;8.从预设数据库中查询所述用户标识对应的归属信息,并确定所述用户标识对应的数据库层级类型;9.当接收所述用户端发送的数据检索请求时,获取所述数据检索请求对应的检索类型;10.若所述检索类型为关系数据库检索,则根据所述归属信息检索所述数据库层级类型对应的关系数据库,得到第一目标层次数据;11.若所述检索类型为索引数据库检索,则根据所述数据检索请求与所述归属信息检索所述数据库层级类型对应的es索引库,得到第二目标层次数据;12.返回所述第一目标层次数据或所述第二目标层次数据至所述用户端。13.可选地,所述从预设数据库中查询所述用户标识对应的归属信息,并确定所述用户标识对应的数据库层级类型的步骤,包括:14.按照所述用户标识检索预设数据库,获取所述用户标识对应的归属信息并缓存;15.判断所述归属信息是否包含上级节点id;16.若否,则判定所述用户标识对应的数据库层级类型为限定层级类型;17.若是,则判定所述用户标识对应的数据库层级类型为非限定层级类型。18.可选地,所述归属信息包括第一归属机构id,所述关系数据库包括平面层级树信息表和第一机构设备关联信息表;当所述数据库层级类型为限定层级类型时,所述若所述检索类型为关系数据库检索,则根据所述归属信息检索所述数据库层级类型对应的关系数据库,得到第一目标层次数据的步骤,包括:19.若所述检索类型为关系数据库检索,则按照所述第一归属机构id查询所述第一机构设备信息表,确定对应的设备数据以及层级树分支id;20.按照所述层级树分支id查询所述平面层级树信息表,确定对应的层级树分支数据;21.建立每个所述层级树分支数据与所述设备数据之间的关联,得到第一目标层次数据。22.可选地,所述归属信息包括第二归属机构id和所述上级节点id,所述关系数据库包括树节点信息表、树节点关联关系表和第二机构设备关联信息表;当所述数据库层级类型为非限定层级类型时,所述若所述检索类型为关系数据库检索,则根据所述归属信息检索所述数据库层级类型对应的关系数据库,得到第一目标层次数据的步骤,包括:23.若所述检索类型为关系数据库检索,则按照所述第二归属机构id查询所述第二机构设备信息表,确定对应的设备数据、所述上级节点id以及层级树节点id;24.采用所述上级节点id和所述层级树节点id检索所述树节点信息表,确定关联的全部树节点id;25.按照各个所述树节点id分别检索所述树节点关联关系表,得到各个所述树节点id分别对应的第一节点关联关系;26.按照所述第一节点关联关系关联各个所述树节点id对应的树节点并建立所述上级节点id与所述设备数据之间的关联,得到第一目标层次数据。27.可选地,所述归属信息包括第三机构归属id;所述es索引库包括平面层级树索引表和第一机构设备关联索引表;当所述数据库层级类型为限定层级类型时,所述若所述检索类型为索引数据库检索,则根据所述数据检索请求与所述归属信息检索所述数据库层级类型对应的es索引库,得到第二目标层次数据的步骤,包括:28.若所述检索类型为索引数据库检索,则解析所述数据检索请求得到搜索条件和目标数据格式;29.按照所述第三机构归属id检索所述机构设备关联索引表,确定对应的设备数据;30.按照所述搜索条件搜索所述平面层级树索引表,确定对应的层级树信息;31.建立所述层级树信息与所述设备数据之间的关联并转换为所述目标数据格式,得到第二目标层次数据。32.可选地,所述归属信息包括第四机构归属id,所述es索引库包括树节点信息索引表和第二机构设备关联索引表;当所述数据库层级类型为非限定层级类型时,所述若所述检索类型为索引数据库检索,则根据所述数据检索请求与所述归属信息检索所述数据库层级类型对应的es索引库,得到第二目标层次数据的步骤,包括:33.若所述检索类型为索引数据库检索,则解析所述数据检索请求得到搜索条件;34.按照所述第四机构归属id检索所述第二机构设备关联索引表,确定对应的设备数据和所属层次树分支id;35.按照所述搜索条件搜索所述树节点信息索引表,得到多个符合所述搜索条件的层次树节点id;36.按照各个所述层次树节点id分别检索所述第二机构设备关联索引表,确定各个所述层次树节点id对应的第二节点关联关系;37.按照所述第二节点关联关系关联各个所述层次树节点id对应的树节点,并建立与所述设备数据之间的关联,得到第二目标层次数据。38.可选地,还包括:39.当接收到额外用户端发送的设备再分配请求时,创建与所述额外用户端对应的额外用户标识;40.按照所述设备再分配请求确定对应的额外设备数据;41.建立所述额外用户标识与所述额外设备数据之间的关联,得到额外es索引表并保存至所述es索引库。42.可选地,还包括:43.按照预设的更新周期执行预设的配置文件,对所述关系数据库内的关系数据进行字段转换,得到es索引字段;44.将所述es索引字段同步至所述es索引库。45.本发明第二方面提供了一种层次数据检索装置,包括:46.用户标识获取模块,用于响应于任一用户端发送的登录请求,获取所述用户端对应的用户标识;47.数据库层级类型确定模块,用于从预设数据库中查询所述用户标识对应的归属信息,并确定所述用户标识对应的数据库层级类型;48.检索类型获取模块,用于当接收所述用户端发送的数据检索请求时,获取所述数据检索请求对应的检索类型;49.关系数据检索模块,用于若所述检索类型为关系数据库检索,则根据所述归属信息检索所述数据库层级类型对应的关系数据库,得到第一目标层次数据;50.索引数据检索模块,用于若所述检索类型为索引数据库检索,则根据所述数据检索请求与所述归属信息检索所述数据库层级类型对应的es索引库,得到第二目标层次数据;51.层次数据返回模块,用于返回所述第一目标层次数据或所述第二目标层次数据至所述用户端。52.本发明第三方面还提供了一种电子设备,包括存储器及处理器,所述存储器中储存有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如本发明第一方面任一项所述的层次数据检索方法的步骤。53.从以上技术方案可以看出,本发明具有以下优点:54.本发明通过响应于任一用户端发送的登录请求,获取用户端对应的用户标识;从预设数据库中查询用户标识对应的归属信息,并确定用户标识对应的数据库层级类型;当接收用户端发送的数据检索请求时,获取数据检索请求对应的检索类型;若检索类型为关系数据库检索,则根据归属信息检索数据库层级类型对应的关系数据库,得到第一目标层次数据;若检索类型为索引数据库检索,则根据数据检索请求与归属信息检索数据库层级类型对应的es索引库,得到第二目标层次数据;返回第一目标层次数据或第二目标层次数据至用户端。从而通过划分检索类型和数据库层级类型,在简化检索架构和检索路径的基础上,经数据库设计和es搜索库设计互相配合,可以通过一个sql语句或是数次查询的方式获取到层次树数据,进而更为有效地提高了亿级用户量下数据检索过程的效率。附图说明55.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。56.图1为本发明实施例一提供的一种层次数据检索方法的步骤流程图;57.图2为本发明实施例二提供的一种层次数据检索方法的步骤流程图;58.图3为本发明实施例提供的一种层次数据数据的增量同步过程的步骤流程图;59.图4为本发明实施例提供的一种es索引库的检索查询流程的步骤流程图;60.图5为本发明实施例三提供的一种层次数据检索装置的结构框图。具体实施方式61.本发明实施例提供了一种层次数据检索方法、装置和设备,用于解决传统的层次数据检索方法由于其架构和检索路径的限制,在亿级用户量的互联网业务搜索过程中的检索效率较低,无法满足互联网业务发展需求的技术问题。62.为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。63.请参阅图1,图1为本发明实施例一提供的一种层次数据检索方法的步骤流程图。64.本发明提供的一种层次数据检索方法,包括:65.步骤101,响应于任一用户端发送的登录请求,获取用户端对应的用户标识;66.用户标识指的是任一用户端在发送登录请求时,登录请求所携带的用户端id。67.在本发明实施例中,本装置响应于任一用户端发送的登录请求,并对登录请求进行登录验证,例如通过是用户端是否注册来判断该用户端是否拥有对应的登录权限等,若登录验证通过,则从登录请求获取该用户端对应的用户标识,以得到后续用户端查询层次数据的数据基础。68.步骤102,从预设数据库中查询用户标识对应的归属信息,并确定用户标识对应的数据库层级类型;69.预设数据库指的是存储有用户端-机构关联表、层次树分支id集合等信息的关系型数据库。70.归属信息指的是表示该用户标识与多个归属机构、用户类型和归属树分支之间的关联关系的信息,包括但不限于第一归属机构id、第二归属机构id、第三归属机构id、第四归属机构id和上级节点id等信息。71.在获取到登录请求所携带的用户标识后,可以采用该用户标识作为检索字,在预设数据库中查询对应的归属信息,同时按照该用户标识结合登录请求,判断该用户标识所属的层次数据库的数据库层级类型。72.步骤103,当接收用户端发送的数据检索请求时,获取数据检索请求对应的检索类型;73.在确定用户标识对应的数据库层级类型后,若是接收到用户端发送的数据检索请求,则可以进一步响应该数据检索请求,获取其中对应的检索类型,以确定该数据检索请求所需要的检索方式,例如关系数据库检索或索引数据库检索等。74.步骤104,若检索类型为关系数据库检索,则根据归属信息检索数据库层级类型对应的关系数据库,得到第一目标层次数据;75.关系数据库指的是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用的实质是装载着数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存取或重新召集而不需要重新组织数据库表格。关系数据库的定义造成元数据的一张表格或造成表格、列、范围和约束的正式描述。每个表格(有时被称为一个关系)包含用列表示的一个或更多的数据种类。每行包含一个唯一的数据实体,这些数据是被列定义的种类。当创造一个关系数据库的时候,你能定义数据列的可能值的范围和可能应用于那个数据值的进一步约束。而sql语言是标准用户和应用程序到关系数据库的接口。其优势是容易扩充,且在最初的数据库创造之后,一个新的数据种类能被添加而不需要修改所有的现有应用软件。主流的关系数据库有oracle、db2、sqlserver、sybase、mysql等。76.若是判定检索类型为关系数据库检索的情况下,由于数据检索请求中的数据请求已经由归属信息的形式提取得到,此时可以采用归属信息作为关键字或关键词,按照关系数据库检索的检索方式在数据库层级类型对应的关系数据库进行检索,以得到第一目标层次数据。77.步骤105,若检索类型为索引数据库检索,则根据数据检索请求与归属信息检索数据库层级类型对应的es索引库,得到第二目标层次数据;78.es索引库指的是一个分布式、高扩展、高实时的搜索与数据分析引擎。用关系数据库的概念理解的话,es的索引相当于关系数据库中的表,一个索引中可以包含多个不同数据类型的字段,只是es的索引之间不能做表之间的关联。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。elasticsearch的实现原理主要分为以下几个步骤,首先用户将数据提交到elasticsearch数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。79.若是检索类型判定为索引数据库检索的情况下,表明此时的检索方式为模糊搜索或全文搜索,为提高后续搜索效率,可以基于数据检索请求所指定的搜索条件结合归属信息组成复合关键字或关键词,检索数据库层级类型对应的es索引库,从而得到第二目标层次数据。80.步骤106,返回第一目标层次数据或第二目标层次数据至用户端。81.在获取到第一目标层次数据或第二目标层次数据后,将其返回至用户端供用户端显示,使得用户能够进行层次数据的查阅。82.在本发明实施例中,通过响应于任一用户端发送的登录请求,获取用户端对应的用户标识;从预设数据库中查询用户标识对应的归属信息,并确定用户标识对应的数据库层级类型;当接收用户端发送的数据检索请求时,获取数据检索请求对应的检索类型;若检索类型为关系数据库检索,则根据归属信息检索数据库层级类型对应的关系数据库,得到第一目标层次数据;若检索类型为索引数据库检索,则根据数据检索请求与归属信息检索数据库层级类型对应的es索引库,得到第二目标层次数据;返回第一目标层次数据或第二目标层次数据至用户端。从而通过划分检索类型和数据库层级类型,在简化检索架构和检索路径的基础上,经数据库设计和es搜索库设计互相配合,可以通过一个sql语句或是数次查询的方式获取到层次树数据,进而更为有效地提高了亿级用户量下数据检索过程的效率。83.请参阅图2,图2为本发明实施例二提供的一种层次数据检索方法的步骤流程图。84.本发明提供的一种层次数据检索方法,包括:85.步骤201,响应于任一用户端发送的登录请求,获取用户端对应的用户标识;86.在本发明实施例中,步骤201的具体实施过程与步骤101类似,在此不再赘述。87.步骤202,从预设数据库中查询用户标识对应的归属信息,并确定用户标识对应的数据库层级类型;88.可选地,步骤202可以包括以下子步骤:89.按照用户标识检索预设数据库,获取用户标识对应的归属信息并缓存;90.判断归属信息是否包含上级节点id;91.若否,则判定用户标识对应的数据库层级类型为限定层级类型;92.若是,则判定用户标识对应的数据库层级类型为非限定层级类型。93.在本发明实施例中,归属信息可以包括多种内容,为进一步提高后续检索效率,可以在得到用户标识后,可以按照用户标识对预设数据库进行查询,以获取到用户标识对应的归属信息并缓存。94.与此同时,解析归属信息判断其中是否包含有上级节点id这一信息,若没有包含上级节点id,则表明此时归属信息中的归属机构id并不具有关联的上级节点id,也就是说该用户标识所对应的数据库层级类型是有限的,此时可以判定用户标识对应的数据库层级类型为限定层级类型;若是包含有上级节点id,则表明此时归属信息中的归属机构id具有关联的上级节点id,层级数据是以节点信息、节点关联关系的形式存储,此时可以判定用户标识对应的数据库层级类型为非限定层级类型。95.值得一提的是,归属信息还可以包括用户类型,用于限定该用户端所属类型,例如用户端属于某一机构,用户端作为独立机构等本发明实施例对此不作限定。96.步骤203,当接收用户端发送的数据检索请求时,获取数据检索请求对应的检索类型;97.在本发明实施例中,步骤203的具体实施过程与步骤103类似,在此不再赘述。98.在具体实现中,关系数据库可以通过以下方式进行构建:99.1)限定层级类型的关系数据库100.通过在关系数据库中建立平面层级树信息表、机构信息表(保存机构id、名称、地址、联系信息等机构自身数据)、机构与设备关联表、用户信息表、用户和机构关联表,根据sql查询条件为表建立索引。其中,用户信息表用来保存用户端id、名称、手机号等自身信息。各个节点的字段名应尽量是业务实体名的简称,应在特殊情况下才使用按顺序编号的字段名。用户与机构关联表用于记录用户与所属机构之间的关联关系。101.以从省到街道的层级树为例,平面层级树信息表t_region_tree可如下表1所示:102.字段含义字段名数据类型备注ididbigint主键,也是层级树分支id省/直辖市provincevarchar省/直辖市idprovince_idbigint市/辖区cityvarchar市/辖区idcity_idbigint区/县countyvarchar区/县idcounty_idbigint街道/镇streetvarchar街道/镇idstreet_idbigint社区/村communityvarchar社区/村idcommunity_idbigint底层村/小区villagevarchar底层村/小区idvillage_idbigint103.表1104.其中,采用一个表记录层次树从顶层至最底层的完整分支以及其中各个节点的关系信息,表中字段从左至右的顺序按照层次树从上至下各节点的实际顺序一一对应,主要字段可以包括各个节点的名称、节点编号等信息,具有相同根节点的所有记录构成了这个根节点树的所有分支。如果需要更新节点名,以街道名为例,执行updatet_region_treesetstreet=’新名’wherestreet=’旧街道名’。删除层次树的节点时,直接执行update操作清空对应记录中的节点字段,表明层次树分支中忽略这个节点来组装分支;被清空的节点后续还可以通过update操作再写入新的节点名从而使之加入到树的分支中。105.而第一机构设备信息表可以如下表2所示:106.[0107][0108]表2[0109]如表2所示,第一机构设备信息表主要字段可以包括但不限于第一归属机构id、设备id、设备名、设备ip地址等,若是第一归属机构仅存在一个层级树分支时,id也可以为层级树分支id。[0110]而在上述示例中,作为节点名的省市县区名变化的频率很低。如果节点名会频繁变化,同时一个树的子节点数可能比较多,为避免数据库update操作的影响,还可以把所有节点名抽出来建立一个节点信息表,主要字段包括节点id、节点名、节点编码,这样每次更新节点名称时只需更新这里的一条记录即可。平面层级树信息表中对每个层级树节点只保存节点的id或编码,id和编码按连续自增数据构建,此时一条记录可以存储多达数百个层级的层次树。[0111]上述表1与表2的结构优势包括:1)满足层次树管理、存储上的业务需求;2)能够通过一次sql查询获得一个机构的所有目录树;3)能够通过一次sql查询获得包含一个节点的层次树的完整信息;4)支持用户数据权限及数据安全,保证一个用户只能看到其权限允许看到的数据;5)业务数据的增删改等管理操作对其他操作的影响可以控制在一个有限的范围,不会随着数据量的增加越来越大。[0112]2)非限定层级类型的关系数据库[0113]对于非限定层级类型的关系数据库,通常需要保存的数据规模较大,若是采用上述限定层级类型的关系数据库的方式保存,容易导致读取缓慢,此时可以将上述平面层级树信息表拆分为树节点信息表t_node_link和树节点关联关系表t_node_link,同时建立第二机构设备关联信息表。[0114]具体地,树节点信息表记载有各个树节点id、节点名以及其他可根据业务增加的字段。树节点关联关系表可以如下表3所示:[0115][0116][0117]表3[0118]当t_node_link用来保存节点自身时,high_id=node_id,distance都为0;对于叶子节点is_leaf为1,否则为0。另外,还用这个表保存所有非叶子节点和其所有下级节点之间的关联数据,即distance的值至少是0。[0119]做这样的数据库设计下,不但可以一次性查出一个树的所有记录,层次树数据的管理、查询都不复杂,新增、删除节点时仅仅影响节点所在分支的改动位置及下级节点相关的记录。修改节点信息时不会影响t_node_link。例如:在需要新增(删除)、删除节点时,通过high_id字段可方便地实现,类似对链表增加或删除节点,对distance的调整可以从ui上方便地计算新层级的相对值;要查询一个节点的各个下级的所有节点,可以使用sql:select*fromt_node_linkl,t_nodenwheren.name=’要查询的节点名’andn.id=l.high_idandl.distance!=0,其中节点id也可以用节点编号替换;要查询任意节点的所有直属下级节点,可以使用sql:select*fromt_node_linkl,t_nodenwheren.name=’要查询的节点名’andn.id=l.node_idandl.distance=1;要查询任意节点的所有上级节点,可以使用sql:select*fromt_node_linkl,t_nodenwheren.name=’要查询的节点名’andn.id=l.node_idandl.distance!=0,通过节点表的node_id=节点间关联表的node_id、distance!=0;根据is_root=1可以方便地查询所有树的根节点。[0120]步骤204,若检索类型为关系数据库检索,则根据归属信息检索数据库层级类型对应的关系数据库,得到第一目标层次数据;[0121]在本发明的一个示例中,归属信息包括第一归属机构id,关系数据库包括平面层级树信息表和第一机构设备关联信息表;当数据库层级类型为限定层级类型时,步骤204可以包括以下子步骤:[0122]若检索类型为关系数据库检索,则按照第一归属机构id查询第一机构设备信息表,确定对应的设备数据以及层级树分支id;[0123]按照层级树分支id查询平面层级树信息表,确定对应的层级树分支数据;[0124]建立每个层级树分支数据与设备数据之间的关联,得到第一目标层次数据。[0125]在本实施例中,当判定数据库层级类型为限定层级类型且检索类型为关系数据库检索时,说明此时需要检索的数据为限定层级类型的关系数据库,此时可以从归属信息中获取到第一归属机构id,按照该第一归属机构id查询第一机构设备信息表,确定该第一归属机构id对应的设备数据以及对应的层级树分支id,再按照层级树分支id查询平面层级树信息表,确定对应的层级树分支数据,也就是上述的从省至底层村整个层级树分支,最后建立每个层级树分支数据与设备数据之间的关联,得到第一目标层次数据。[0126]在具体实现中,还可以通过构建sql语句的方式进行查询,其中sql语句为:selectt.*,d.device_id,d.device_namefromt_org_deviced,t_treetwhered.org_id=user_org_idandd.branch_id=t.id,其中user_org_id是第一归属机构id,branch_id为层级树分支id,t.id为层级树分支数据。[0127]在得到层级树分支数据后,可把层级树分支数据及该分支下的所有设备数据以及对应的层级树分支id放到一条记录中,设备数据可以作为集合类型字段构成层级树分支id的分支数据对象的一个属性。[0128]在本发明的另一个实例中,归属信息包括第二归属机构id和上级节点id,关系数据库包括树节点信息表、树节点关联关系表和第二机构设备关联信息表;当数据库层级类型为非限定层级类型时,步骤204可以包括以下子步骤:[0129]若检索类型为关系数据库检索,则按照第二归属机构id查询第二机构设备信息表,确定对应的设备数据、上级节点id以及层级树节点id;[0130]采用上级节点id和层级树节点id检索树节点信息表,确定关联的全部树节点id;[0131]按照各个树节点id分别检索树节点关联关系表,得到各个树节点id分别对应的第一节点关联关系;[0132]按照第一节点关联关系关联各个树节点id对应的树节点并建立上级节点id与设备数据之间的关联,得到第一目标层次数据。[0133]在本实施例中,当判定数据库层级类型为非限定层级类型且检索类型为关系数据库检索时,说明此时需要检索的关系数据库为非限定层级类型的,可以按照第二归属机构id查询第二机构设备信息表,确定该第二归属机构id所关联的设备数据、上级节点id和层级树节点id;再采用上级节点id和层级树节点id检索树节点信息表,以确定该层级树节点id对应的树节点所处整个层级树的全部树节点id,再按照各个树节点id分别检索树节点关联关系表,以确定各个树节点id对应的树节点之间的第一节点关联关系,按照该第一节点关联关系关联各个树节点id对应的树节点并建立上级节点id与设备数据之间的关联,得到第一目标层次数据。[0134]可选地,本方法还可以包括以下步骤:[0135]按照预设的更新周期执行预设的配置文件,对关系数据库内的关系数据进行字段转换,得到es索引字段;[0136]将es索引字段同步至es索引库。[0137]在具体实现中,为保证索引库的稳定性和准确性,es索引库通常是在建立一定规模的关系数据库并运行一段时间后再进行建设,同时为实现对es索引库的周期性更新,可以按照预设的更新周期执行预设的配置文件,对关系数据库内的关系数据进行字段转换,以得到对应的es索引字段,再将es索引字段同步至es索引库。[0138]以上述层级树信息表t_plain_tree的同步为例,可以通过以下步骤s11-s15或步骤s21-s26实现es索引库的数据同步:[0139]s11、安装logstash-integration-jdbc等相关插件。参照官方文档配置数据库连接以及获取数据的sql:selectdistinctp.*fromt_plain_treep,t_org_devicedwherep.id=d.branch_idandp.id》=:sql_last_value。更多需求可以通过调整这里的sql实现;[0140]s12、编辑logstash配置文件,使之利用配置项tracking_column=》id、record_last_run=》true、clean_run=》false分页地追踪并记录id字段,用上述sql从mysql查询数据后保存到es。使用插件logstash-filter-mutate、logstash-filter-ruby可以新增、移除、分拆字段或者改变字段的值,通过logstash-filter-geoip可以根据设备ip从ip地址库geolite2-city.mmdb解析出设备位置对应的经纬度、省市县名并在es中生成对应的字段,这种情况下中文区域名需修改logstash安装目录下的ib/logstash/filters/geoip.rb来对每个获得的区域名继续调用get("zh-cn"),由于这里的ip地址信息通过csv文件保存,因此也可以维护自己的地址库,还可以在geoip.rb中通过ruby代码调用ip解析服务获得相关中文区域信息;[0141]s13、通过logstash-filter-mutate插件把中文区域信息、经纬度信息分别添加到es索引的字段device_location、device_pos中;[0142]s14、继续编辑logstash配置文件,利用logstash-output-elasticsearch把上述处理结果写入到es;[0143]s15、使用上述配置文件启动logstash,运行至全量数据迁移完毕后停止;这里也可以利用logstash配置文件中的schedule设置定时地从mysql同步数据到es。[0144]在另一个示例中,开源数据同步工具canal由于直接操作mysql的binlog因此能很好地与业务系统解耦,同时其操作给mysql带来的压力也很有限,但是当一个层次树分支尚未完全形成时就把其同步到es只会增加没用的es更新操作,由于业务规则的差异,不同状态的业务实体数据也常见不需要全部同步的情况,另外,数据的处理和验证可能还需要查询其他数据库或es,所以需要通过canal客户端来控制数据的增量同步,具体可参照图3,步骤如下:[0145]通过实现canal的接口initializingbean和parsecanal来创建canal的监听客户端,解析数据变更,获得发生变化的数据库表及数据;当发现表t_plain_tree、t_node的数据发生变化时,检查表t_org_device中是否存在变化的数据的id对应的设备关联记录,如果不存在则不同步对应的节点数据,否则继续同步;在正式同步数据前,先通过反射获得变更的数据对应的实体类;在需要同步t_plain_tree、t_node的数据到es时,如果是新增记录则直接在对应的es索引中写入新记录,如果是update操作则直接更新es索引的对应记录;如果是delete操作,先删除机构设备索引中delete操作对应的id的记录,再删除表t_plain_tree、t_node相应的索引中的数据;如果机构设备关联表发生变化时,对表t_org_device的新增数据,直接把新增的记录写入到对应的es索引;对于这个表的update、delete的数据,根据其id更新或者删除es索引中对应的记录;如果有更多数据需要同步,则从继续监听是否发生数据变更。[0146]在具体实现中,es索引库在进行关系数据的同步后,为方便后续数据检索,可以通过以下方式进行表格构建:[0147]1)限定层级类型的es索引库[0148]对于非限定层级类型的es索引库,可以包括但不限于节点信息索引表、平面层级树索引表和第一机构设备关联索引表。[0149]具体地,平面层级树索引表可以如下表4所示:[0150][0151]表4[0152]值得一提的是,在上述表4中还可以在索引中增加业务上需要搜索的字段,例如设备所在地理位置、设备名、设备标签、设备能力等。[0153]第一机构设备关联索引表可以如下表5所示:[0154][0155]表5[0156]值得一提的是,基于上述数据库及es的索引设计,在研发实现上提供两个配套措施,一方面简化基于java语言的开发,尽量减少必须开发的代码量,另外还提高搜索操作的性能。springdataelasticsearch继承了springdata的优点,包括不需要写实现代码只需要接口和@repository、@query注解就能实现对es中数据的模糊查询和搜索,但是其默认的findall()方法如果在生产环境下存在大量数据时被频繁调用来查看全部数据,可能会导致服务不稳定;另外@query注解的内容写法与es的painless脚本一致,不容易理解和记忆,易用性上远不如sql查询语法,还不支持在查询结果中控制返回索引中的哪些字段,现有实现实际返回所有字段。[0157]为解决第一个问题,由于默认的findall()方法的具体实现代码在类simpleelasticsearchrepository中,并且在meta-inf中默认通过spring.factories中指定由elasticsearchrepositoryfactory控制通过哪个类提供es查询方法的实现类。因此可以继承simpleelasticsearchrepository这个类,重写其中的findall()方法,其中增加warn或error级别的告警输出,并且给这个方法增加@deprecated注解,然后再继承elasticsearchrepositoryfactory并调用新开发的simpleelasticsearchrepository的子类,并且在spring.factories中指定elasticsearchrepositoryfactory的子类作为repositoryfactorysupport。[0158]为解决第二个问题,可以针对es的特定类型的查询封装专门的查询注解,例如针对模糊查询,可以对照query注解的实现和处理流程封装一个新的注解fuzzyquery及其处理流程,指定需要查询的字段、对应的参数值的标识、字段之间组装时的逻辑关系,默认按逻辑与处理,在运行时直接通过repository接口的fuzzyquery注解所在的方法中的参数按顺序替换;在指定返回字段列表或需排除的字段列表时,直接在查询请求的painless脚本中通过字符串处理生成对应的内容,其他方面保持和query注解相同的效果。然后在类elasticsearchquerymethod、elasticsearchrepositoryfactory中按上述新增的功能解析注解fuzzyquery的内容并对应生成painless脚本内容,这样既可避免输入{\"wildcard\":{、\"bool\":或{\"must\":这样的内容,也可以避免许多{、}、[、]这些符号带来的困扰。最后,重新打包生成jar后给业务系统替换原来使用的jar文件即可。[0159]2)非限定层级类型的es索引库[0160]对于非限定层级类型的es索引库,可以包括但不限于节点信息索引表、平面层级树索引表和第一机构设备关联索引表。[0161]具体的,平面层级树索引表的具体构建与上述表4类似,节点信息索引表可以如下表6所示:[0162][0163]表6第二机构设备关联索引表可以如下表7所示:[0164][0165]表7[0166]值得一提的是,在实际搜索时,经过java的completablefuture的supplyasync()方法同时向上述两个索引发起搜索请求,再通过allof()方法汇总所有的异步请求,最终整个的耗时稍高于两个请求中耗时最久的。当不需要返回层次树形式的结果数据时,直接返回这里的搜索结果即可,否则通过java代码再根据这里的得到的节点信息可以从层次树各节点之间关联信息表查询到节点对应的所有树的分支数据,接下来组装成完整的层次树数据返回即可。[0167]步骤205,若检索类型为索引数据库检索,则根据数据检索请求与归属信息检索数据库层级类型对应的es索引库,得到第二目标层次数据;[0168]在本发明的一个示例中,归属信息包括第三机构归属id;es索引库包括平面层级树索引表和第一机构设备关联索引表;当数据库层级类型为限定层级类型时,步骤205可以包括以下子步骤:[0169]若检索类型为索引数据库检索,则解析数据检索请求得到搜索条件和目标数据格式;[0170]按照第三机构归属id检索机构设备关联索引表,确定对应的设备数据;[0171]按照搜索条件搜索平面层级树索引表,确定对应的层级树信息;[0172]建立层级树信息与设备数据之间的关联并转换为目标数据格式,得到第二目标层次数据。[0173]搜索条件指的是可能与es索引库内的字段不完全相同但相关的数据限制信息。目标数据格式指的是用户端所需求的层级树数据或是用户端特有的的数据格式。[0174]在本发明实施例中,当确定数据库层级类型为限定层级类型下,若是需要进行索引数据库检索,则可以解析数据检索请求以获取到搜索条件以及目标数据格式。按照搜索条件以及第三机构归属id,异步地从机构设备管理索引表以及平面层级树索引表内进行检索,确定第三机构归属id对应的设备数据以及满足搜索条件的层级树信息;再建立层级树信息和设备数据之间的关联并转换为目标数据格式,得到第二目标层次数据。[0175]在具体实现中,可参照图4,通过以下步骤s31-s34实现es索引库的检索查询:[0176]s31、用户从缓存中获取第三机构归属id,如果找不到则先查询关系数据库mysql、更新缓存后再继续;[0177]s32、根据第三机构归属id、搜索条件异步地从机构设备管理索引表、平面层级树索引表中搜索符合条件的数据,得到满足搜索条件的层级树信息以及设备数据作为搜索结果;[0178]可选地,在上述s32中,如果树的节点信息与平面层级树各节点间的关系分别存储在不同的索引中,则直接根据缓存的层级树分支id集合、第三机构归属id异步地同时搜索机构设备管理索引表、平面层级树索引表得到搜索结果。接下来如果不需要把搜索结果组装成树形数据可以直接按客户端要求的结果返回,否则可以再次通过缓存查询mysql获得树的节点关系数据,最后再由应用服务把结果数据组装成用户端需要的数据后返回。[0179]s33、若是搜索结果的记录数超过指定的阈值,则向用户端返回第一页(允许配置每一页有多少条记录)的结果及结果集的总数据量;[0180]s34、在内存中通过java代码将上述搜索结果组织成用户端需要的字段、数据格式后,得到第二目标层次数据返回用户端即可;[0181]在本发明的另一个示例中,归属信息包括第四机构归属id,es索引库包括树节点信息索引表和第二机构设备关联索引表;当数据库层级类型为非限定层级类型时,步骤205可以包括以下子步骤:[0182]若检索类型为索引数据库检索,则解析数据检索请求得到搜索条件;[0183]按照第四机构归属id检索第二机构设备关联索引表,确定对应的设备数据和所属层次树分支id;[0184]按照搜索条件搜索树节点信息索引表,得到多个符合搜索条件的层次树节点id;[0185]按照各个层次树节点id分别检索第二机构设备关联索引表,确定各个层次树节点id对应的第二节点关联关系;[0186]按照第二节点关联关系关联各个层次树节点id对应的树节点,并建立与设备数据之间的关联,得到第二目标层次数据。[0187]在本发明实施例中,若检索类型为索引数据库检索且索引数据库为非限定层级类型,则解析数据检索请求得到搜索条件;按照第四机构归属id检索第二机构设备关联索引表,确定对应的设备数据和所属层次树分支id;按照搜索条件搜索树节点信息索引表,得到多个符合搜索条件的层次树节点id;按照各个层次树节点id分别检索第二机构设备关联索引表,确定各个层次树节点id对应的第二节点关联关系;按照第二节点关联关系关联各个层次树节点id对应的树节点,并建立与设备数据之间的关联,得到第二目标层次数据。[0188]步骤206,返回第一目标层次数据或第二目标层次数据至用户端。[0189]在本发明实施例中,步骤206的具体实施过程与步骤106类似,在此不再赘述。[0190]步骤207,当接收到额外用户端发送的设备再分配请求时,创建与额外用户端对应的额外用户标识;[0191]步骤208,按照设备再分配请求确定对应的额外设备数据;[0192]步骤209,建立额外用户标识与额外设备数据之间的关联,得到额外es索引表并保存至es索引库。[0193]在具体实现中,用户端通常是处于某一机构下,同一机构可以同时包括多个用户端,但可能由于业务需求,需要为单独某一用户进行设备的分配,为解决该技术问题,当接收到额外用户端发送的设备再分配请求时,创建与该额外用户端对应的额外用户标识,按照设备再分配请求确定该额外用户端所需求的额外设备数据,例如设备名、设备id、设备位置、设备标签和设备能力等,再建立额外用户标识与额外设备数据之间的关联,得到额外es索引表。而为方便后续检索,可以将该额外es索引表保存至es索引库。[0194]在本发明一个示例中,表8示出了本发明实施例的一种额外es索引表:[0195]表8[0196]在本发明的另一个示例中,为了区分这类用户并专门处理,在应用系统设计上,可以为这种这类用户非单独的角色或者为其创建专门的用户属性表示是否已经单独为其分配设备。如果通过角色控制,在为用户分配设备前先检查用户是否是要求的角色,检查通过后才能为这类用户分配设备;如果通过专用用户属性表示已单独为其分配设备,则通过一个关系数据库的事务包装为用户分配设备、设置这个属性值的操作,使得在数据库中成功保存为用户分配的设备后总是成功为相应用户设置对应的属性值。根据选择上述哪种方案,在用户登录时分别从数据库提取用户的角色或用户的上述属性数据后缓存在redis集群中,后续用户发起搜索请求时,可以根据缓存的数据的值,判断应该对相应的用户搜索这部分的索引,从而同步实现对用户数据权限的控制。[0197]值得一提的是,在层级树内的各个树节点可能还存在设备上下线的情况,此时可以通过以下方式实现设备数据的更新:设备上下线事件的感知在技术上主要有两种途径:基于socket通过tcp/ip通信连接的建立和断开、基于设备心跳的上报数据,后者会定时收到设备的心跳数据并且在超过一定时间后如果一直收不到会认定设备已下线。二者都需要专门的设备接入服务,该服务可以通过mqtt协议、基于netty的自定义协议甚至http协议的设备心跳请求接收设备的通信请求。[0198]在线设备数的实时计算方案的细节包括:[0199]为实时计算层次树节点下属设备的在线数,每当设备在线状态变化时,设备接入服务实例可以先在内存中通过concurrenthashmap保存设备的id(连续增长的数字)及其状态,在确认到设备的连接建立、断开,或者收到设备心跳请求、超时收不到设备请求时,分别设置设备在线状态为true、false,多个设备同时出现状态变化时,直接通过多个线程并发地调用concurrenthashmap的put()方法修改对应设备id的状态即可。然后由设备接入服务集群中的应用服务实例定时(间隔允许配置)地把这些数据同步刷新到多主多从的redis集群,redis再通过其bitset保存设备的在线状态,各个redis的master实例。在层次树最大层级数固定时,bitset的key是层次树分支的id;当最大层级数不限时,key为设备紧邻上级节点的id,如果这个id发生变化,需要同步更新这里缓存的key。bitset中每一位的序号与对应的设备id相等,这个位的值通过0、1分别表示设备不在线、在线。通过redis的setbit、getbit、bitcount指令可以方便地设置、获取一个序号的bit对应的设备id的在线状态、一个key下的总在线设备数。如果某个节点下的设备id普遍大于一个数字,可以在操作redis时把所有的设备id都减去一个数,例如其中最小的设备id,有助于节约内存占用。当需要获取层次树各节点的在线设备数时,可以批量地把一组树分支id或设备紧邻节点的id,通过redis的pipeline机制批量发送通过bitcount获取一个key的总在线设备数,然后由应用服务组装结果数据并返回。如果用户只能访问一个节点下的部分设备,可以通过redis的pipeline机制批量发送通过getbit获取一个设备id的在线状态的指令,返回1表名对应的设备在线,在应用服务内存中累计后再把总在线设备数返回给用户端。各个节点的总设备数,可以数据库中查询后缓存到redis集群中供后续查询节点下的总设备数时直接从缓存获取。redis中可以通过hash按树分支或节点的id作为key,总设备数作为属性来存储,在发生设备新增、删除或移动操作时,对相应key的hash值作加、减对应设备数的操作,在发现redis中任意key的总设备数据为空时,从数据源加载数据并缓存在redis的hash中。如果用户端层次树的实现效果是逐级打开层次树,默认开始时只打开第一级节点,那实现上更简单:只要在用户双击打开某个节点时,直接打开下一级的树节点,当要打开的是最后一级树节点时,直接根据这个节点的id从redis中通过bitcount指令获取在线设备数即可。如果用户只能访问其中部分设备,把这些设备的id分批次从redis通过pipeline获取每个设备的在线状态后在内存中累计,把用户拥有的设备累计完成后的结果即为当前节点的总在线设备数。由于整个过程主要在内存中进行,而且redis多住多从集群的良好可扩展性和可用性,在线设备数的计算不仅能实时进行,还会具有较好的性能。[0200]在本发明实施例中,通过响应于任一用户端发送的登录请求,获取用户端对应的用户标识;从预设数据库中查询用户标识对应的归属信息,并确定用户标识对应的数据库层级类型;当接收用户端发送的数据检索请求时,获取数据检索请求对应的检索类型;若检索类型为关系数据库检索,则根据归属信息检索数据库层级类型对应的关系数据库,得到第一目标层次数据;若检索类型为索引数据库检索,则根据数据检索请求与归属信息检索数据库层级类型对应的es索引库,得到第二目标层次数据;返回第一目标层次数据或第二目标层次数据至用户端。从而通过划分检索类型和数据库层级类型,在简化检索架构和检索路径的基础上,经数据库设计和es搜索库设计互相配合,可以通过一个sql语句或是数次查询的方式获取到层次树数据,进而更为有效地提高了亿级用户量下数据检索过程的效率。[0201]请参阅图5,图5为本发明实施例三提供的一种层次数据检索装置的结构框图。[0202]本发明实施例提供了一种层次数据检索装置,包括:[0203]用户标识获取模块501,用于响应于任一用户端发送的登录请求,获取用户端对应的用户标识;[0204]数据库层级类型确定模块502,用于从预设数据库中查询用户标识对应的归属信息,并确定用户标识对应的数据库层级类型;[0205]检索类型获取模块503,用于当接收用户端发送的数据检索请求时,获取数据检索请求对应的检索类型;[0206]关系数据检索模块504,用于若检索类型为关系数据库检索,则根据归属信息检索数据库层级类型对应的关系数据库,得到第一目标层次数据;[0207]索引数据检索模块505,用于若检索类型为索引数据库检索,则根据数据检索请求与归属信息检索数据库层级类型对应的es索引库,得到第二目标层次数据;[0208]层次数据返回模块506,用于返回第一目标层次数据或第二目标层次数据至用户端。[0209]可选地,数据库层级类型确定模块502具体用于:[0210]按照用户标识检索预设数据库,获取用户标识对应的归属信息并缓存;[0211]判断归属信息是否包含上级节点id;[0212]若否,则判定用户标识对应的数据库层级类型为限定层级类型;[0213]若是,则判定用户标识对应的数据库层级类型为非限定层级类型。[0214]可选地,归属信息包括第一归属机构id,关系数据库包括平面层级树信息表和第一机构设备关联信息表;当数据库层级类型为限定层级类型时,关系数据检索模块504具体用于:[0215]若检索类型为关系数据库检索,则按照第一归属机构id查询第一机构设备信息表,确定对应的设备数据以及层级树分支id;[0216]按照层级树分支id查询平面层级树信息表,确定对应的层级树分支数据;[0217]建立每个层级树分支数据与设备数据之间的关联,得到第一目标层次数据。[0218]可选地,归属信息包括第二归属机构id和上级节点id,关系数据库包括树节点信息表、树节点关联关系表和第二机构设备关联信息表;当数据库层级类型为非限定层级类型时,关系数据检索模块504具体用于:[0219]若检索类型为关系数据库检索,则按照第二归属机构id查询第二机构设备信息表,确定对应的设备数据、上级节点id以及层级树节点id;[0220]采用上级节点id和层级树节点id检索树节点信息表,确定关联的全部树节点id;[0221]按照各个树节点id分别检索树节点关联关系表,得到各个树节点id分别对应的第一节点关联关系;[0222]按照第一节点关联关系关联各个树节点id对应的树节点并建立上级节点id与设备数据之间的关联,得到第一目标层次数据。[0223]可选地,归属信息包括第三机构归属id;es索引库包括平面层级树索引表和第一机构设备关联索引表;当数据库层级类型为限定层级类型时,索引数据检索模块505包括:[0224]若检索类型为索引数据库检索,则解析数据检索请求得到搜索条件和目标数据格式;[0225]按照第三机构归属id检索机构设备关联索引表,确定对应的设备数据;[0226]按照搜索条件搜索平面层级树索引表,确定对应的层级树信息;[0227]建立层级树信息与设备数据之间的关联并转换为目标数据格式,得到第二目标层次数据。[0228]可选地,归属信息包括第四机构归属id,es索引库包括树节点信息索引表和第二机构设备关联索引表;当数据库层级类型为非限定层级类型时,索引数据检索模块505包括:[0229]若检索类型为索引数据库检索,则解析数据检索请求得到搜索条件;[0230]按照第四机构归属id检索第二机构设备关联索引表,确定对应的设备数据和所属层次树分支id;[0231]按照搜索条件搜索树节点信息索引表,得到多个符合搜索条件的层次树节点id;[0232]按照各个层次树节点id分别检索第二机构设备关联索引表,确定各个层次树节点id对应的第二节点关联关系;[0233]按照第二节点关联关系关联各个层次树节点id对应的树节点,并建立与设备数据之间的关联,得到第二目标层次数据。[0234]可选地,装置还包括:[0235]用户标识创建模块,用于当接收到额外用户端发送的设备再分配请求时,创建与额外用户端对应的额外用户标识;[0236]额外设备数据确定模块,用于按照设备再分配请求确定对应的额外设备数据;[0237]关联建立模块,用于建立额外用户标识与额外设备数据之间的关联,得到额外es索引表并保存至es索引库。[0238]可选地,装置还包括:[0239]字段转换模块,用于按照预设的更新周期执行预设的配置文件,对关系数据库内的关系数据进行字段转换,得到es索引字段;[0240]字段同步模块,用于将es索引字段同步至es索引库。[0241]本发明实施例还提供了一种电子设备,包括存储器及处理器,存储器中储存有计算机程序,计算机程序被处理器执行时,使得处理器执行如本发明任一实施例的层次数据检索方法的步骤。[0242]所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。[0243]在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。[0244]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0245]另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。[0246]所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。[0247]以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献