发明内容
本发明的目的是提供一种可高效查询已存储数据的关联数据的信息查询方法、装置、计算机设备及存储介质,用于解决现有技术存在的问题。
为实现上述目的,本发明提供一种关联数据的信息查询方法,包括以下步骤:
响应于数据查询指令,获取所述数据查询指令中的字段,从第一索引结构中查询与所述字段相对应的目标数据表的目标位置;其中所述索引结构表征相互关联的多张第一数据表之间的索引关系,所述目标数据表是所述相互关联的多张第一数据表中的一个或多个;
根据所述目标位置,从数据存储空间内获取与所述字段相匹配的匹配字段;
获取与所述匹配字段相对应的第一数据记录。
进一步,所述索引结构包括以文本格式存储的多个主键和多个外键,所述多个主键和所述多张第一数据表一一对应;
从第一索引结构中查询与所述字段相对应的目标数据表的目标位置的步骤进一步包括:
从所述第一索引结构中查询与所述字段相对应的数据表的主键或外键,从而确定目标数据表的目标位置。
进一步,所述从数据存储空间内获取与所述字段相匹配的匹配字段包括:
从内存缓冲区中获取与所述字段精确匹配的第一匹配字段,其中所述第一匹配字段是以文本格式存储的;或者
从数据库中获取与所述字段模糊匹配的第二匹配字段。
进一步,所述从所述第一索引结构中查询与所述字段相对应的数据表的主键或外键,从而确定目标数据表的目标位置的步骤包括:
确定所述字段在索引结构中的目标层次位置,其中所述目标层次位置表征直接包含所述字段的索引层次;
确定与所述目标层次位置相匹配的主键或外键,根据所述主键或外键确定目标数据表的目标位置。
进一步,在响应于数据查询指令,获取所述数据查询指令中的字段,从第一索引结构模型中查询与所述字段相对应的目标数据表的目标位置的步骤之前,还包括:
响应于数据存储指令,存储相互关联的多张第二数据表中的数据记录;
获取每张所述第二数据表的主键和外键;
以文本格式存储所有所述第二数据表中的主键和外键,得到表征所述多张第二数据表之间的索引关系的第二索引结构模型。
为实现上述目的,本发明还提供一种关联数据的信息查询装置,包括:
索引结构获取模块,适用于响应于数据查询指令,获取所述数据查询指令中的字段,从第一索引结构中查询与所述字段相对应的目标数据表的目标位置;其中所述索引结构表征相互关联的多张第一数据表之间的索引关系,所述目标数据表是所述相互关联的多张第一数据表中的一个或多个;
匹配字段获取模块,适用于根据所述目标位置,从数据存储空间内获取与所述字段相匹配的匹配字段;
数据记录获取模块,适用于获取与所述匹配字段相对应的第一数据记录。
进一步地,所述匹配字段获取模块包括:
第一匹配字段获取模块,适用于从内存缓冲区中获取与所述字段精确匹配的第一匹配字段;
第二匹配字段获取模块,适用于从数据库中获取与所述字段模糊匹配的第二匹配字段。
进一步地,还包括:
数据存储模块,适用于响应于数据存储指令,存储相互关联的多张第二数据表中的数据记录;
主外键获取模块,适用于获取每张所述第二数据表的主键和外键;
索引结构存储模块,适用于以文本格式存储所有所述第二数据表中的主键和外键,得到表征所述多张第二数据表之间的索引关系的第二索引结构。
为实现上述目的,本发明还提供一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
为实现上述目的,本发明还提供计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。
本发明提供的关联数据的信息查询方法、装置、计算机设备及计算机可读存储介质,通过将相互之间具有关联关系的数据表中的数据记录和各数据表之间的索引关系分开存储,可以实现快速访问数据记录的目的。本发明以文本格式存储数据表之间的索引关系和数据表的位置信息,当需要查询某条与目标字段相关的数据记录时,首先从索引存储区域获取数据表之间的索引关系,从索引关系中查找与目标字段相关联的数据表及其位置信息,然后到数据记录存储区域的上述位置处获取与目标字段对应的数据记录,避免了在数据库中建立繁琐的索引关系的步骤,整个查询过程清晰快速,从而有效提高数据库的运行效率,提高用户体验。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供的高速数据存储与查询方法、装置、计算机设备及存储介质,适用于数据库技术领域,为具有关联关系的海量数据的存储与查询提供一种高效快速的自动化实现方案。本发明通过将相互之间具有关联关系的数据表中的数据记录和各数据表之间的索引关系分开存储,可以实现快速访问数据记录的目的。本发明以文本格式存储数据表之间的索引关系和数据表的位置信息,当需要查询某条与目标字段相关的数据记录时,首先从索引存储区域获取数据表之间的索引关系,从索引关系中查找与目标字段相关联的数据表及其位置信息,然后到数据记录存储区域的上述位置处获取与目标字段对应的数据记录,避免了在数据库中建立繁琐的索引关系的步骤,整个查询过程清晰快速,从而有效提高数据库的运行效率,提高用户体验。
实施例一
请参阅图1,本实施例提出一种关联数据的信息查询方法,主要用于从已存储的数据库中查询与特定字段相对应的数据记录,包括以下步骤:
S1:响应于数据查询指令,获取所述数据查询指令中的字段,从第一索引结构中查询与所述字段相对应的目标数据表的目标位置;其中所述索引结构表征相互关联的多张第一数据表之间的索引关系,所述目标数据表是所述相互关联的多张第一数据表中的一个或多个。
传统的数据库查询方式,例如从oracle数据库中查询信息,需要从oracle数据库的查询索引中确定相关的数据表,再从数据表中查找相关记录。索引信息的查询需要利用sql语句实现,该语句编写较为繁琐,在数据量较大的情况下,仅仅查询索引信息就会占用大量的时间。为此,本发明不再采取在数据库中建立大量的查询索引,而是把数据表之间的索引关系独立出来单独存储,从而大大缩短查询索引信息的时间。
本发明将独立存储的索引关系称之为索引结构,本领域普通技术人员可以理解,一套完整的数据系统对应一个或者几个索引结构。该索引结构以普通文本的格式存储到搜索引擎中,当输入某特定字段时,通过文本搜索的方式而不是SQL语句来实现查询,从而极大提升了搜索效率。优选的,本发明中的搜索引擎选用基于Lucene的搜索服务器ElasticSearch,它提供了一个分布式多用户能力的全文搜索引擎,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。
本发明中的索引结构保存相互关联的多张数据表中的索引关系,优选的,通过提取主键信息和外键信息来保存上述索引关系。以下通过具体实例介绍相互关联的多张数据表中的索引关系是如何被保存的。
假设存在三张相互关联的数据表,分别为客户基本信息表T_BASE,客户账户表T_ACCOUNT和客户额度表T_AMOUNT。客户基本信息表T_BASE中的所有字段包括ID_T_BASE,CUST_NO,CUST_NAME和AGE,其中主键为ID_T_BASE,外键为CUST_NO;客户账户表T_ACCOUNT中的所有字段包括ID_T_ACCOUNT,CUST_NO,ACCOUNT_NO,ACCOUNT_TYPE,BALANCE,其中主键为ID_T_ACCOUNT,外键为ACCOUNT_NO;客户额度表T_AMOUNT中的所有字段包括ID_T_AMOUNT,ACCOUNT_NO和AMOUNT,其中主键为ID_T_AMOUNT。基于上述信息,本发明利用json格式建立的这三张数据表的数据模型如下所示:
上述索引结构模型清晰地列出了每张数据表中的主键及其对应的外键,各个表之间的层次结构明确,索引逻辑清晰,可以快速实现对任一个主键或者外键的信息查询。
另外通过上述代码,还可以总结出本发明记录多张表之间的索引结构的方法,包括以下步骤:
选定基础表;记录基础表的基础主键;记录基础表的基础外键;选定与所述基础外键相关联的第一数据表;记录第一数据表的第一主键;记录第一数据表的第一外键;选定与第一外键相关联的第二数据表;记录第二数据表的第二主键。如果还有其它多张表,以此类推。
S2:根据所述目标位置,从数据存储空间内获取与所述字段相匹配的匹配字段。
本发明通过上述索引结构模型可以直接定位数据表。以上文中的三张数据表为例,例如搜索字段“ACCOUNT_NO”,可以明确知道该字段属于客户账户表T_ACCOUNT,因此后续只需从客户账户表T_ACCOUNT中查找数据记录。又例如搜索字段“ID_T_AMOUNT”,则可以快速确定出该字段属于客户额度表T_AMOUNT,后续只需从客户额度表T_AMOUNT中查找相关的数据记录。
根据上述实施例,可以总结出本发明根据数据查询指令中的字段从索引结构中查询目标数据表的步骤:
S21:确定所述字段在索引结构中的目标层次位置,其中所述目标层次位置表征直接包含所述字段的索引层次。
从上文三张数据表的数据模型中可以看出,该数据模型共包含三对括号,每一对括号对应一个索引层次,各个索引层次之间通过外键相连,本实施例中的外键指的是每一个左括号所在行中的字段。例如,本发明上述数据模型中,最内层的括号内部包含的值为"ID":"$ID_T_AMOUNT的值",最内层左括号对应的外键为"AMOUNT"。通过该外键就可以确定字段“ID_T_AMOUNT”所在的数据表为客户额度表T_AMOUNT。
S22:确定与所述目标层次位置相匹配的主键或外键,根据所述主键或外键确定目标数据表的目标位置。
实际上,本发明中的任何一个外键字段本身都是作为某个数据表的主键存在的,正因如此,在查询到外键的基础上就已经可以获知该外键直接对应的目标数据表。
进一步,本发明根据外键和主键之间的索引关系确定目标数据表的查询路径,通过查询路径直接确定目标数据表的目标位置。
例如,本发明可以看到客户额度表T_AMOUNT在索引结构模型中的位置。通过查找包含"AMOUNT"的上一层括号的外键,可以知道上一层括号的外键为"ACCOUNT",即对应的数据表为客户账户表T_ACCOUNT。进一步可以看到,索引结构模型中"ACCOUNT"是位于最外层括号之内的,其对应的上一个有索引关系的数据表即为客户基本信息表T_BASE。
通过上述层次关系,可以清楚地获得目标数据表的查询路径,即客户基本信息表T_BASE→客户账户表T_ACCOUNT→客户额度表T_AMOUNT,通过上述查询路径可以直接找到目标数据表的目标位置。
需要说明的是,本发明可以选择数据表中的具体数据记录的存储空间,既可以选择存储在普通数据库中,也可以选择存储在内存缓冲区域。优选的,可以将使用频率高的基础数据表信息,或者最近一段时间内录入的信息保存在内存缓冲区,而将使用频率较低或者一段时间之前录入的信息保存在oracle数据库中。当接收到针对某一特定字段的数据查询指令时,首先到内存缓冲区域中去查找有无相应字段信息,若没有,再到oracle数据库中查询。其中,本发明在内存缓冲区中存储的是文本格式的数据,因为内存缓冲区中存储的数据量较少,可以适用精确匹配方式,从而保证更加快速准确地返回结果。而在oracle数据库中存储的信息量较大,为了保证返回结果的完整性,可以适用模糊匹配方式,从而为用户提供更全面的选择范围。由于从内存中查找信息的速度远高于从数据库中查找,因此本发明通过选择性地设置数据记录的存储区域,可以进一步提高数据访问速度。
S3:获取与所述匹配字段相对应的第一数据记录。
本发明中,目标字段指的是包含在数据查询指令中的字段,匹配字段指的是与所述目标字段精确匹配或者模糊匹配的字段。本发明可以根据实际需要选择通过精确匹配还是模糊匹配的方式查找数据。例如数据查询指令中的字段为“账户”,通过模糊匹配可得到多个匹配字段包括“账户编号”、“账户余额”、“账户类型”等字段。这种情况下,本发明可以通过智能算法自动对查询到的信息进行排序。
本发明所述的智能算法包括,标记匹配字段的出现频率以及出现位置,将出现频率最高的字段对应的数据记录排在前面。例如数据查询指令中要查询“账户”相关的数据记录,在索引结构模型中,发现到“账户编号”一词分别在第2、4、6、8、10行中共出现了五次,而“账户余额”一词则分别在第7、9、11行中出现了三次,基于此,可以把与“账户编号”相对应的数据记录排在所有数据记录的前面。
请继续参阅图2,示出了一种关联数据的信息查询存储装置,在本实施例中,信息查询装置10可以包括或被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本发明,并可实现上述自动更新方法。本发明所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序本身更适合于描述信息查询装置10在存储介质中的执行过程。以下描述将具体介绍本实施例各程序模块的功能:
索引结构获取模块11,适用于响应于数据查询指令,获取所述数据查询指令中的字段,从第一索引结构模型中查询与所述字段相对应的目标数据表的目标位置;其中所述索引结构表征相互关联的多张第一数据表之间的索引关系,所述目标数据表是所述相互关联的多张第一数据表中的一个或多个;
匹配字段获取模块12,适用于根据所述目标位置,从数据存储空间内获取与所述字段相匹配的匹配字段;
数据记录获取模块13,适用于获取与所述匹配字段相对应的第一数据记录。
进一步地,所述匹配字段获取模块12包括:
第一匹配字段获取模块121,适用于从内存缓冲区中获取与所述字段精确匹配的第一匹配字段;
第二匹配字段获取模块122,适用于从数据库中获取与所述字段模糊匹配的第二匹配字段。
进一步地,还包括:
数据存储模块14,适用于响应于数据存储指令,存储相互关联的多张第二数据表中的数据记录;
主外键获取模块15,适用于获取每张所述第二数据表的主键和外键;
索引结构存储模块16,适用于以文本格式存储所有所述第二数据表中的主键和外键,得到表征所述多张第二数据表之间的索引关系的第二索引结构模型。
本实施例还提供一种计算机设备,如可以执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。本实施例的计算机设备20至少包括但不限于:可通过系统总线相互通信连接的存储器21、处理器22,如图3所示。需要指出的是,图3仅示出了具有组件21-22的计算机设备20,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
本实施例中,存储器21(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器21可以是计算机设备20的内部存储单元,例如该计算机设备20的硬盘或内存。在另一些实施例中,存储器21也可以是计算机设备20的外部存储设备,例如该计算机设备20上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器21还可以既包括计算机设备20的内部存储单元也包括其外部存储设备。本实施例中,存储器21通常用于存储安装于计算机设备20的操作系统和各类应用软件,例如实施例一的信息查询装置10的程序代码等。此外,存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器22在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制计算机设备20的总体操作。本实施例中,处理器22用于运行存储器21中存储的程序代码或者处理数据,例如运行信息查询装置10,以实现实施例一的信息查询方法。
本实施例还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于存储信息查询装置10,被处理器执行时实现实施例一的信息查询方法。
实施例二
请参阅图4,本实施例提出一种信息存储方法,与实施例一的信息查询方法相对应,是实现实施例一的信息查询方法的基础。本实施例提出的信息存储方法包括以下步骤:
S1:响应于数据存储指令,存储相互关联的多张第二数据表中的数据记录。
本实施例的以下步骤用于介绍相互关联的多张数据表的存储过程。
当接收到数据存储指令后,本发明首先会存储相互关联的多张数据表中的数据记录,需要说明的是,本步骤中是不需要存储数据表之间的索引关系的。数据表中的数据记录一般会存储到普通数据库中,例如oracle数据库,但也可以根据实际需要将一部分数据记录存储到内存缓冲区以方便将来的查找,这部分数据记录例如可以是使用频率高的基础数据表信息,或者最近一段时间内录入的信息。由于从内存中查找信息的速度远高于从数据库中查找,因此本发明通过选择性地设置数据记录的存储区域,可以进一步提高数据访问速度。
S2:获取每张所述第二数据表的主键和外键。
本步骤用于获取相互关联的多张数据表中的每张数据表的主键和外键,目的是建立索引结构。本领域普通技术人员可以理解,一套完整的数据系统对应一个或者几个索引结构。该索引结构以普通文本的格式存储到搜索引擎中,当输入某特定字段时,通过文本搜索的方式而不是SQL语句来实现查询,从而极大提升了搜索效率。优选的,本发明中的搜索引擎选用基于Lucene的搜索服务器ElasticSearch,它提供了一个分布式多用户能力的全文搜索引擎,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。
S3:以文本格式存储所有所述第二数据表中的主键和外键,得到表征所述多张第二数据表之间的索引关系的第二索引结构。
本步骤中优选通过json格式编写索引结构。依次记录每张数据表中的主键和与其他数据表相关联的外键,按照表与表之间的结构逐层往下存储,从而形成包含了全部数据表中各个主键的树形结构。
假设存在三张相互关联的数据表,分别为客户基本信息表T_BASE,客户账户表T_ACCOUNT和客户额度表T_AMOUNT。客户基本信息表T_BASE中的所有字段包括ID_T_BASE,CUST_NO,CUST_NAME和AGE,其中主键为ID_T_BASE,外键为CUST_NO;客户账户表T_ACCOUNT中的所有字段包括ID_T_ACCOUNT,CUST_NO,ACCOUNT_NO,ACCOUNT_TYPE,BALANCE,其中主键为ID_T_ACCOUNT,外键为ACCOUNT_NO;客户额度表T_AMOUNT中的所有字段包括ID_T_AMOUNT,ACCOUNT_NO和AMOUNT,其中主键为ID_T_AMOUNT。基于上述信息,本发明利用json格式建立的这三张数据表的索引结构如下所示:
上述索引结构清晰地列出了每张数据表中的主键及其对应的外键,各个表之间的层次结构明确,索引逻辑清晰,可以快速实现对任一个主键或者外键的信息查询。通过该树形结构,可以清楚地获得个各数据表之间的逻辑索引关系,便于后续进行快速地信息查找。
另外,本发明所提出的技术方案可以很好地解决在存储过程中面临的数据量拓展的问题。首先,本发明采用文本格式存储数据表之间的索引结构。文本格式本身所占的空间非常小,通常意义上的数据量扩展对于索引结构模型的存储几乎没有影响。另一方面,普通数据库中只单纯地存储数据记录,不再需要存储大量的索引关系,减少了插入数据时的索引重建操作,因而也在很大程度上减少了数据量,使得同样容量的数据库可以存储更多的数据。即使是数据量增大到必须扩容的程度,本发明也非常易于操作。例如可以将数据记录不存储在传统的如oracle数据库中,而是直接存放在hadoop数据平台;同时存储索引结构的Elasticsearch也是横向拓展工具,对于数据量增加,都只需要新增集群主机即可。
请继续参阅图5,本实施例的信息查询装置30以实施例一为基础,用以实现实施例二的信息查询方法,其包括的各程序模块的功能:
索引结构获取模块31,适用于响应于数据查询指令,获取所述数据查询指令中的字段,从第一索引结构中查询与所述字段相对应的目标数据表的目标位置;其中所述索引结构表征相互关联的多张第一数据表之间的索引关系,所述目标数据表是所述相互关联的多张第一数据表中的一个或多个;
匹配字段获取模块32,适用于根据所述目标位置,从数据存储空间内获取与所述字段相匹配的匹配字段;
数据记录获取模块33,适用于获取与所述匹配字段相对应的第一数据记录。
进一步地,所述匹配字段获取模块32包括:
第一匹配字段获取模块321,适用于从内存缓冲区中获取与所述字段精确匹配的第一匹配字段;
第二匹配字段获取模块322,适用于从数据库中获取与所述字段模糊匹配的第二匹配字段。
进一步地,还包括:
数据存储模块34,适用于响应于数据存储指令,存储相互关联的多张第二数据表中的数据记录;
主外键获取模块35,适用于获取每张所述第二数据表的主键和外键;
索引结构存储模块36,适用于以文本格式存储所有所述第二数据表中的主键和外键,得到表征所述多张第二数据表之间的索引关系的第二索引结构。
综上所述,本发明提出的关联数据的信息查询方法、装置、计算机设备及存储介质,可以减少在数据库中创建大量索引的过程,通过用文本格式建立数据表之间的索引结构,可以有效减少对数据的访问压力。同时本发明造业务处理过程中可以直接从缓存中获取数据,提高数据查询效率且具有良好的可拓展性,可以支持大数据量下的存储查询需求。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
流程图中或在此以其它方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所述技术领域的技术人员所理解。
本技术领域的普通技术人员可以理解,实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。