一种数据访问方法、装置及系统与流程

文档序号:12802383阅读:181来源:国知局
一种数据访问方法、装置及系统与流程
本发明涉及数据库
技术领域
,尤其涉及一种数据访问方法、装置及系统。
背景技术
:关系型数据库(如oracle、mysql等)通常采用数据表的方式存储数据,应用(app)则可以通过数据库提供的数据库管理系统(databasemanagementsystem,dbms)接口,如java数据库连接(javadatabaseconnectivity,jdbc)等,访问数据库中的数据表。目前,数据库大概支持两种不同的数据存储方式:第一种存储方式:以物理数据表类型的数据表存储数据。其中,物理数据表类型的数据表是指直接将数据存储在数据表中,每个物理数据表类型的数据表可以包括索引,则app要访问某个数据表时可以直接访问,比如在访问时可以获取该数据表的索引,从而根据索引定位待访问的数据。物理数据表类型是一种专用的数据表类型,即一个数据表中存储的数据之间关联性较强,比如可以将一个公司的工资表放在一个物理数据表类型的数据表中。这种数据存储方式是当前比较常见的方式,操作简单,访问性能较好。但在这种数据存储方式下,如果新增了数据表或者对已有的数据表中的字段结构进行了修改等,都需要对app进行改造,比如修改app中的执行代码或是在app中植入新的代码等,以使得app获知更新后的数据表应该如何访问,显然实现较为复杂,灵活性较差。第二种存储方式:以对象数据(objectdata)表类型的数据表存储数据。在这种存储方式下, 数据库中还存储有元数据表以及索引(index)表,元数据表中存储的是元数据(metadata),元数据包括对数据库中存储的对象数据表中的表结构的定义、字段结构的定义、索引定义、表对象之间的关系的定义等,索引表中存储的是相应字段所在的位置等。app在访问时,可首先从元数据表中获取相应的定义,之后通过索引表定位待访问的数据。在这种访问方式下,可以由元数据引擎根据元数据表中的定义来对数据库进行访问,无需app直接访问数据库,所以访问方式较为灵活,基本无需改造app。但对象数据表类型是一种通用数据表类型,即一个数据表中可以存储互不相关的多种数据,通俗解释,就是一个对象数据表类型的数据表中可以包含多个物理数据表类型的数据表中的数据。因此,目前对象数据表类型的数据表中存储的数据量一般都比较大。然而,在查询数据时,是要在整张数据表中进行检索,如果这种数据表中存储的数据量过大,显然会影响查询速度,导致系统的性能受损。可见,目前的两种存储方式都各有缺点,然而现在的数据库都只能支持一种存储方式,即要么支持第一种存储方式要么支持第二种存储方式,无法实现较好地存储。技术实现要素:本申请提供一种数据访问方法、装置及系统,用以解决目前的数据库无法实现较好地存储的技术问题。第一方面,提供一种数据访问方法,包括:接收数据访问请求;确定所述数据访问请求所访问的数据表的存取类型;其中,数据表的存取类型包括物理数据表类型及以元数据形式存储在数据库中的对象数据表类型;根据确定的数据表的存取类型,从所访问的数据表中获取所访问的数据。数据库可以同时支持两种存储方式,即数据库中的数据表的存取类型可以包括物理数据表类型及对象数据表类型,这样,针对不同的数据可以采用不同 的存储方式,一方面可以考虑数据量较小的数据的存储灵活性,比如可以采用对象数据表类型的数据表存储数据量较小的数据,另一方面也可以考虑数据量较大的数据的高访问性能,比如可以采用物理数据表类型的数据表存储数据量较大的数据,等等,分别为不同的数据提供较为适合的存储方式,使得数据库中的存储方式更为合理。在访问数据时只需根据访问请求确定所访问的数据所在的数据表的类型即可实现对数据的访问,实现较为简单,便于推广使用。结合第一方面,在第一方面的第一种可能的实现方式中,确定所述数据访问请求所访问的数据表的存取类型,包括:获取所述数据访问请求所携带的待访问的第一数据表的信息及第二数据表的信息;根据存储的数据表的信息与数据表的存取类型之间的对应关系确定所述第一数据表的存取类型为所述物理数据表类型,及所述第二数据表的存取类型为所述对象数据表类型。可以预先存储数据表的信息与数据表的存取类型之间的对应关系,这样在接收数据访问请求后,只需获取数据访问请求中携带的待访问的数据表的信息就可以确定待访问的数据表的存取类型,这样可以较为简单地区分不同存取类型的数据表,避免混淆,保证后续能够采用正确的方式访问不同存取类型的数据表。结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,根据确定的数据表的存取类型,从所访问的数据表中获取所访问的数据,包括:根据所述数据访问请求携带的针对所述第一数据表的第一访问条件,从所述第一数据表中获取符合所述第一访问条件的m个第一数据;根据所述数据访问请求携带的针对所述第二数据表的第二访问条件,从所述第二数据表中获取符合所述第二访问条件的n个第二数据;m、n均为正整数;在获取所述n个第二数据的过程中,每获取一个第二数据,将获取的第二数据与所述m个第一数据进行关联操作,在进行n次关联操作后,得到所访问的数据。如果访问的是不同存取类型的数据表,那么用户可能想要得到的是将两个数据表中的内容进行关联后的数据,因此,可以将第一数据表中获取的数据与第二数据表中获取的数据进行关联操作,这样可以呈现给用户较为有规律的数据,无需用户再自行进行组合。另外,在获取第二数据的过程中,每获取一个第二数据就可以将获取的第二数据与m个第一数据进行关联操作,关联操作较为及时,有助于提高效率。结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,将获取的第二数据与所述m个第一数据进行关联操作,包括:获取所述数据访问请求中携带的关联条件;所述关联条件用于将所述m个第一数据及所述n个第二数据进行关联操作;确定所述获取的第二数据是否与所述m个第一数据中的至少一个第一数据满足所述关联条件;若所述获取的第二数据与所述至少一个第一数据满足所述关联条件,则得到包括所述获取的第二数据与所述至少一个第一数据的一组关联数据。提供了一种进行关联操作的方式,根据数据访问请求中携带的关联条件进行关联操作,既符合用户的需求,操作过程也较为快捷。结合第一方面或第一方面的第一种可能的实现方式至第三种可能的实现方式中的任一种可能的实现方式,在第一方面的第四种可能的实现方式中,所述方法还包括:若所述数据库中存储的第三数据表包括的数据量大于预设阈值,且所述第三数据表的类型为所述对象数据表类型,则输出第一提示信息;所述第一提示信息用于指示将所述第三数据表的类型转换为所述物理数据表类型。预设阈值可以是数据访问装置自行设定的,比如可以是系统根据学习经验 设定的,或者可以是用户设定的,如果对象数据表类型的数据表(如第三数据表)包括的数据量大于预设阈值,那么在访问第三数据表时就需要耗费较多的时间,可能会影响系统性能,因此如果第三数据表包括的数据量大于预设阈值,数据访问装置可以输出第一提示信息,这样用户可以选择是否要将第三数据表的存取类型转换为物理数据表类型,以提高数据访问性能。结合第一方面或第一方面的第一种可能的实现方式至第四种可能的实现方式中的任一种可能的实现方式,在第一方面的第五种可能的实现方式中,所述方法还包括:接收用于请求建立第四数据表的请求消息;所述请求消息中携带所述第四数据表包括的数据量;若所述第四数据表包括的数据量大于预设阈值,输出第二提示信息,所述第二提示信息用于指示以所述物理数据表类型建立所述第四数据表;或,若所述第四数据表包括的数据量小于等于预设阈值,输出第二提示信息,所述第二提示信息用于指示以所述对象数据表类型建立所述第四数据表。数据访问装置可以根据待建立的第四数据表包括的数据量输出建议(即第二提示信息),如果数据量大于预设阈值,则建议以物理数据表类型建立第四数据表,以提高数据访问性能,如果数据量小于等于预设阈值,则建议以对象数据表类型建立第四数据表,以提高数据访问的灵活性。这样,根据不同的数据量可以建立不同类型的数据表,使得数据库中的存储方式更为合理,尽量提高数据访问性能。第二方面,提供一种数据访问装置,包括:存储器,用于存储指令;接收器,用于接收数据访问请求;处理器,用于执行所述指令,确定所述数据访问请求所访问的数据表的存取类型;其中,数据表的存取类型包括物理数据表类型及以元数据形式存储在数据库中的对象数据表类型;根据确定的数据表的存取类型,从所访问的数据 表中获取所访问的数据。结合第二方面,在第二方面的第一种可能的实现方式中,所述处理器用于:获取所述数据访问请求所携带的待访问的第一数据表的信息及第二数据表的信息;根据存储的数据表的信息与数据表的存取类型之间的对应关系确定所述第一数据表的存取类型为所述物理数据表类型,及所述第二数据表的存取类型为所述对象数据表类型。结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述处理器用于:根据所述数据访问请求携带的针对所述第一数据表的第一访问条件,从所述第一数据表中获取符合所述第一访问条件的m个第一数据;根据所述数据访问请求携带的针对所述第二数据表的第二访问条件,从所述第二数据表中获取符合所述第二访问条件的n个第二数据;m、n均为正整数;在获取所述n个第二数据的过程中,每获取一个第二数据,将获取的第二数据与所述m个第一数据进行关联操作,在进行n次关联操作后,得到所访问的数据。结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述处理器用于:获取所述数据访问请求中携带的关联条件;所述关联条件用于将所述m个第一数据及所述n个第二数据进行关联操作;确定所述获取的第二数据是否与所述m个第一数据中的至少一个第一数据满足所述关联条件;若所述获取的第二数据与所述至少一个第一数据满足所述关联条件,则得到包括所述获取的第二数据与所述至少一个第一数据的一组关联数据。结合第二方面或第二方面的第一种可能的实现方式至第三种可能的实现 方式中的任一种可能的实现方式,在第二方面的第四种可能的实现方式中,所述装置还包括发送器;所述处理器还用于:若确定所述数据库中存储的第三数据表存储的数据量大于预设阈值,且所述第三数据表的类型为所述对象数据表类型,则通过所述发送器输出第一提示信息;所述第一提示信息用于指示将所述第三数据表的类型转换为所述物理数据表类型。结合第二方面或第二方面的第一种可能的实现方式至第四种可能的实现方式中的任一种可能的实现方式,在第二方面的第五种可能的实现方式中,所述装置还包括发送器;所述接收器还用于:接收用于请求建立第四数据表的请求消息;所述请求消息中携带所述第四数据表包括的数据量;所述处理器还用于:若确定所述第四数据表包括的数据量大于预设阈值,通过所述发送器输出第二提示信息,所述第二提示信息用于指示以所述物理数据表类型建立所述第四数据表;或,若确定所述第四数据表包括的数据量小于等于预设阈值,通过所述发送器输出第二提示信息,所述第二提示信息用于指示以所述对象数据表类型建立所述第四数据表。第三方面,提供一种数据访问系统,包括:数据库,用于存储数据表;其中,数据表的存取类型包括物理数据表类型及以元数据形式存储在所述数据库中的对象数据表类型;还包括如第二方面或第二方面的第一种可能的实现方式至第五种可能的实现方式中的任一种可能的实现方式所述的数据访问装置,用于根据接收的数据访问请求访问所述数据库,以从所访问的数据表中获取所访问的数据。第四方面,提供另一种数据访问装置,该数据访问装置包括用于执行第一方面的方法的模块。本发明实施例中的数据库同时支持如上的两种数据存储方式,这样针对不同的数据可以选择不同的存储方式,而在访问数据时只需根据访问请求确定待 访问的数据所在的数据表的类型就知道该如何访问数据,实现方式简单,便于推广利用。附图说明为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所介绍的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1a-图1b为数据库中的第一种存储方式的两种示意图;图2为数据库中的第二种存储方式示意图;图3为本发明实施例中数据库中的存储方式示意图;图4a-图4b为本发明实施例中数据访问装置的结构示意图;图5为本发明实施例中数据访问系统的结构示意图;图6为本发明实施例中的数据访问方法的流程图;图7为本发明实施例中数据访问装置的结构框图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。首先简单介绍数据库的两种数据存储方式。第一种存储方式:以物理数据表类型的数据表存储数据。在建立物理数据表类型的数据表时,是用户通过app直接在数据库中建立,例如用户在数据库中建立了几个物理数据表类型的数据表,请参见图1a,分别为数据表1、数据表2和数据表3,当然,在建立一个数据表后,还要建立 该数据表对应的索引,索引一般跟数据表存储在一起。以及,在建立一个数据表后,还要对该数据表中的表结构、字段等进行定义,这些定义可以放在数据表的可扩展标记语言(xml)信息中,xml信息也可以跟数据表存储在一起。app比如要访问数据表1,则可以通过应用服务层的jdbc接口直接访问数据表1,比如在访问时可以先获取数据表1的索引,从而根据索引定位待访问的数据。或者,app也可以不经过应用服务层而直接访问数据库,请参见图1b,例如用户在数据库中建立了几个物理数据表类型的数据表,分别为数据表1、数据表2和数据表3,用户可以通过操作app直接访问这些数据表,而无需经过应用服务层。其中,app和应用服务层可以看做两个功能模块,这两个功能模块一般通过软件方式实现,这两个功能模块可以位于同一设备中,或者也可以位于不同的设备中。jdbc接口一般是应用服务层提供的接口,供app访问数据库。另外,数据库也可以看做功能模块,一般可以通过设备中的存储器件来实现。app、应用服务层和数据库这三个功能模块可以位于同一设备中,或者也可以分别位于不同的设备中,或者也可以其中的任意两个功能模块位于同一设备中,等等。第二种存储方式:以对象数据表类型的数据表存储数据。在建立对象数据表时,首先需建立元数据表,比如系统可以提供专门用于建立元数据表的界面,用户可以直接在该界面中建立元数据表。用户输入完毕后可以选择提交,例如请参见图2,位于应用服务层的元数据驱动引擎可以根据用户输入的内容在数据库中建立元数据表,并根据用户输入的内容生成元数据表中的元数据,例如元数据可以包括即将建立的对象数据表中的表结构的定义、字段结构的定义、索引定义、表对象之间的关系的定义等,元数据驱动引擎还可以在数据库中建立对应的对象数据表,以存储数据。另外,元数据驱动引擎还可以在数据库中建立用于查询对象数据表中的数据的索引表。其中,一个对象数据表中可以存储各种互不相关的数据,因此,数据库中 可以只需建立一个对象数据表即可,当然建立多个对象数据表的方案也在本发明实施例的保护范围之内。其中,如果数据库中已经建立了元数据表,那么元数据驱动引擎无需再建立新的元数据表,而直接根据用户提交的内容生成元数据,并将元数据放入已生成的元数据表即可。如果数据库中已经建立了对象数据表,则元数据驱动引擎无需建立新的对象数据表,而将要存储的数据放入已建立的对象数据表即可。如果数据库中已经建立了索引表,那么元数据驱动引擎无需再建立新的索引表,而直接将新的数据的索引加入已建立的索引表即可。app比如要访问对象数据表,则可以通过元数据驱动引擎从元数据表中获取对象数据表的表结构等定义,再通过元数据驱动引擎根据索引表进行查询,获得对象数据表中的数据。本发明实施例中的数据库同时支持如上的两种数据存储方式,这样针对不同的数据可以选择不同的存储方式,而在访问数据时只需根据访问请求确定待访问的数据所在的数据表的类型就知道该如何访问数据,实现方式简单,便于推广利用。请参见图3,为本发明实施例中数据库的存储方式示意图。图3中,数据表1为物理数据表类型的数据表,数据表2为对象数据表类型的数据表,另外数据库中还存储了与数据表2对应的元数据表及索引表,其中数据表1的索引与数据表1存储在一起,图3中未画出。另外,图3中是以一个物理数据表类型的数据表为例,在实际应用中,数据库中可能存储多个物理数据表类型的数据表。另外,本发明实施例提供同样位于应用服务层的混合引擎,混合引擎能够分别与用于访问对象数据表的元数据驱动引擎以及用于访问物理数据表的物理数据表访问引擎通信,混合引擎可以接收通过app输入的访问请求,在确定待访问的数据所在的数据表究竟是哪种类型的数据表后,混合引擎可以调用相应的引擎(元数据驱动引擎或物理数据表访问引擎)来响应访问请求,元数 据驱动引擎或物理数据表访问引擎获得待访问的数据后,可以直接反馈给app,不通过混合引擎,或者也可以将待访问的数据反馈给混合引擎,由混合引擎反馈给app,从而实现对不同类型的数据表的访问。可选的,元数据驱动引擎和物理数据表访问引擎可以位于混合引擎中,即混合引擎可以包括元数据驱动引擎和物理数据表访问引擎,当然混合引擎还可以包括其他的功能模块,或者混合引擎、元数据驱动引擎和物理数据表访问引擎也可以是三个独立的模块,混合引擎能够分别与元数据驱动引擎和物理数据表访问引擎进行通信(图3以此为例)。其中,本发明实施例提供物理数据表访问引擎,用于访问物理数据表类型的数据表,物理数据表访问引擎可以是jdbc接口,或者也可以是其他的用于访问物理数据表类型的数据表的接口或引擎。下面结合附图介绍本发明实施例提供的技术方案。请参见图4a,本发明实施例提供一种数据访问装置,该数据访问装置可以包括存储器401、处理器402和接收器403。其中,处理器402可以是中央处理器(cpu)或特定应用集成电路(applicationspecificintegratedcircuit,asic),可以是一个或多个用于控制程序执行的集成电路,可以是使用现场可编程门阵列(fieldprogrammablegatearray,fpga)开发的硬件电路,可以是基带芯片。存储器401的数量可以是一个或多个。存储器401可以包括只读存储器(readonlymemory,rom)、随机存取存储器(randomaccessmemory,ram)和磁盘存储器。接收器403可以用于与外部设备进行通信,例如接收器403可以与app进行通信。可选的,请参见图4b,该装置还可以包括发送器404,可以用于与外部设备进行通信,例如发送器404也可以与app进行通信。发送器404和接收器403可以是同一实体模块,例如可以是能够实现收发 功能的实体模块,比如可以称为收发器,或者发送器404和接收器403也可以是单独的实体模块。这些存储器401、发送器404和接收器403可以通过总线与处理器402相连接(图4a-图4b以此为例),或者也可以通过专门的连接线分别与处理器402连接。通过对处理器402进行设计编程,将下面所示的方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行下面图5所示的方法。如何对处理器402进行设计编程为本领域技术人员所公知的技术,这里不再赘述。其中,该数据访问装置可以实现如图3中的混合引擎的功能。该数据访问装置可以通过软件方式实现,比如可以是固化在设备中的一套软件程序,或者也可以通过硬件方式实现,比如可以是在设备中新增的硬件模块,或者也可以利用设备中原有的硬件模块实现,比如处理器402可以由设备中的数据处理系统实现,存储器401可以由设备中的存储器件实现,或者存储器401也可以由设备中的数据处理系统的内部缓存实现,发送器404和接收器403可以由设备中的数据收发系统实现。请参见图5,基于同一发明构思,本发明实施例还提供一种数据访问系统,该数据访问系统可以包括数据库,还可以包括如图4a或图4b所示的数据访问装置。其中,该系统中的数据库和数据访问装置可以位于同一设备中(图5以此为例),比如可以位于同一服务器中,或者也可以位于不同的设备中,比如可以位于不同的服务器中,或者也可以位于不同的其他类型的设备中。下面介绍本发明实施例提供的方法。请参见图6,本发明实施例提供一种数据访问方法,该方法可以由如前所述的数据访问装置来执行,该方法的流程介绍如下。步骤601:接收数据访问请求;步骤602:确定数据访问请求所访问的数据表的存取类型;其中,数据表的存取类型包括物理数据表类型及以元数据形式存储在数据库中的对象数据 表类型;步骤603:根据确定的数据表的存取类型,从所访问的数据表中获取所访问的数据。接收器403可以接收app输入的数据访问请求,例如,app输入的数据访问请求可以是结构化查询语言(structuredquerylanguage,sql)语句。可选的,数据访问请求中可以携带所访问的数据表的信息,数据表的信息例如可以包括数据表的存取类型、名称或身份标识号(identity,id)等。处理器402可以确定数据访问请求所访问的数据表的存取类型。可选的,如果数据访问请求中直接携带了所访问的数据表的存取类型,则处理器402可以直接根据数据访问请求确定所访问的数据表的存取类型,如果数据访问请求中携带的是数据表的其他信息,例如携带的是数据表的id或数据表的名称等,则处理器402还需确定所访问的数据表的存取类型。因此,存储器401中可以预先存储数据表的信息与数据表的存取类型之间的对应关系,这样处理器402接收数据访问请求后,可以获取数据访问请求中携带的数据表的信息,再根据存储的数据表的信息与数据表的存取类型之间的对应关系确定待访问的数据表的类型。例如,存储器401中预先存储的是数据表的id与数据表的存取类型之间的对应关系,那么,app发送的数据访问请求中携带的也应该是数据表的id,这样处理器402接收数据访问请求后,可以获取数据访问请求中携带的数据表的id,再根据存储的数据表的id与数据表的存取类型之间的对应关系确定待访问的数据表的存取类型。以下通过两个例子来介绍本发明实施例中的数据存储及访问方法。例1:例如,需要在数据库中增加两个数据表,分别为综合账单表(例如称为bill_sum)和细节账单表(例如称为bill_detail),用于记录客户产生的账单记录。例如bill_sum的数据规模为6千万条,bill_sum的表结构请参考表 1:表1字段名称编码数据类型长度必选字段帐户标识acct_idnumber(16)16true地市编码eparchy_codechaar(4)4false综合帐目标识sum_item_codenumber(5)5true实际费用feenumber(12)12false优惠费用adjust_beforenumber(12)12false账单标志statusvarchar2(2)2false账单周期bill_cyclevarchar2(6)6true例如bill_detail的数据规模是bill_sum的10倍,估计是6亿条数据,bill_detail的表结构请参考表2:表2物理数据表类型的数据表较为灵活,访问速度较快,但经常需改造app,比较麻烦,对象数据表类型的数据表在访问时基本无需改造app,但因为包括的数据过多,访问速度相较于物理数据表类型的数据表来说较慢,因此,本发明实施例中,针对不同的数据可以采用不同的存储方式,针对数据量较小的数据可以采用对象数据表类型的数据表存储,因为数据量较小,访问速度也不是太慢,还可以尽量利用对象数据表类型的数据表无需改造app的优势,针对数据量较大的数据,如果采用对象数据表类型的数据表进行存储的话可能访问速度会受到影响,因此可以考虑采用物理数据表类型的数据表存储,以尽量提升访问速度,避免系统性能受损。可选的,可以预先设置预设阈值,并将设置的预设阈值存储在存储器401中,如果需存储的数据量小于等于该预设阈值,则可以将这些数据存储在对象数据表类型的数据表中,如果需存储的数据量大于该预设阈值,则可以将这些数据存储在物理数据表类型的数据表中。预设阈值可以由处理器402自行设定,比如处理器402可以根据存储经验进行设定,或者也可以由用户设定。例如在例1中,该预设阈值为8千万,那么显然,bill_sum的类型可以是对象数据表类型,bill_detail的类型可以是物理数据表类型。例如,存储器401中可以存储数据表的其他信息与数据表的存取类型之间的对应关系(例如将该对应关系存储在一个名为对象类型表的数据表中),比如例1中存储的是数据表的名称与数据表的存取类型之间的对应关系,请参见表3:表3对象类型表中除了存储数据表的名称与数据表的存取类型之间的对应关系外,还可以存储不同的数据表的数据规模、数据表结构信息等信息,可继续参考表3,对象类型表只要能够用于令处理器402确定数据访问请求所请求访问的数据表的存取类型即可,对于对象类型表中存储的其他信息本发明实施例不作限制。在app需要访问bill_detail或bill_sum中的数据时,可以向数据访问装置发送数据访问请求,该数据访问请求可以是通用的sql访问请求,例1中,数据访问请求中可以携带待访问的数据表的名称,接收器403接收访问请求后,处理器402可以根据对象类型表确定待访问的数据表的存取类型。如果数据访问请求中携带的数据表的名称为bill_detail,则处理器402确定待访问的数据表的存取类型为物理数据表类型,处理器402可以调用物理数据表访问引擎。物理数据表访问引擎获取该数据访问请求,获取该数据访问请求所请求访问的表结构、字段等信息,根据bill_detail的xml信息确定根据获取的表结构、字段等信息的定义,再通过bill_detail的索引在bill_detail中访问所需的数据。其中,如果数据访问请求中未携带表结构、字段等信息,则物理数据表访问引擎可能认为需访问所有表结构、字段等对应的数据,那么物理数据表访问引擎可以根据bill_detail的xml信息对该数据访问请求进行重新拼装,在该数据访问请求中添加bill_detail的所有的表结构、字段等信息,再通过bill_detail的索引在bill_detail中访问所需的数据。之后,物理数据表访问引擎可以直接将所访问的数据反馈给app,或者,物理数据表访问引擎也可以将所访问的数据反馈给数据访问装置,由处理器402通过发送器404反馈给app。如果数据访问请求中携带的数据表的名称为bill_sum,则处理器402确 定待访问的数据表的存取类型为对象数据表类型,处理器402可以调用元数据驱动引擎。元数据驱动引擎获取该数据访问请求,获取该数据访问请求所请求访问的表结构、字段等信息,根据元数据表确定根据获取的表结构、字段等信息的定义,再通过索引表在bill_sum中访问所需的数据。之后,元数据驱动引擎可以直接将所访问的数据反馈给app,或者,元数据驱动引擎也可以将所访问的数据反馈给数据访问装置,由处理器402通过发送器404反馈给app。例2:例如,需要在数据库中新增账单类型表(例如称为bill_type)和细节账单表(例如称为bill_detail),其中,建立bill_detail的方式可参考例1的描述。例如bill_type的数据量不大,小于预设阈值(例如预设阈值为8千万),因此可以考虑采用对象数据表类型的数据表进行存储。因为数据库中已经存储了元数据表、对象数据表类型的数据表及索引,那么可以直接将bill_type的元数据放入元数据表、将bill_type中的数据放入对象数据表、及将bill_type中的数据的索引信息放入索引表即可。例如bill_type的表结构可参考表4:表4字段名称编码数据类型长度必选字段帐目标识bill_item_codenumber(5)5true帐目类型item_typenumber(5)5true帐目名称bill_item_namevarchar2(32)32false存储器401存储的对象类型表可参考表5::表5数据表名称存取类型数据规模数据表结构信息bill_typemetadata1千元数据bill_detail物理数据表类型6亿xml表结构信息在app需要访问bill_detail或bill_type中的数据时,可以向数据访问装置发送数据访问请求,该数据访问请求可以是通用的sql访问请求,数据访问请求中可以携带待访问的数据表的名称,接收器403接收访问请求后,处理器402根据对象类型表确定待访问的数据表的存取类型。例如app发送的数据访问请求为sql查询请求,该sql查询请求例如为:selecta.*,b.bill_item_namefrombill_detaila、bill_typebwherea.acct_id=11332anda.bill_item_code=b.bill_item_code(+)。很明显,这个sql查询请求需查询两种不同存取类型的数据表中的数据。那么可选的,对于两个数据表中的数据可以进行关联(join)操作,将关联操作的结果作为反馈给app的数据访问结果。在进行关联操作时,首先可以根据数据访问请求确定所访问的数据表中哪个是主表哪个是从表,比如根据上面的数据访问请求,处理器402可以确定bill_detail为主表,bill_type为从表,则处理器402可以将从表中获取的数据分别与主表中获取的数据进行关联操作。下面介绍关联过程。处理器402调用物理数据表访问引擎,通过物理数据表访问引擎获得bill_detail中的待访问的数据,例如获得m个第一数据,处理器402可以将m个第一数据先存储在缓存中,缓存可以由存储器401提供,或者也可以由处理器402提供。处理器402还需要调用元数据驱动引擎,以通过元数据驱动引擎获得bill_type中的待访问的数据,那么,如果处理器402直接通过元数据驱动引擎一次性获得bill_type中的待访问的全部数据(例如将从bill_type中获取的待访问数据称为第二数据,比如共可以获得n个第二数据)之后再进行关联操作,就需要将m个第一数据和n个第二数据一起存储在缓存中,这样需要占用较大的空间,比较浪费资源,也需要数据访问装置具有较好的性能,因此,可选的,在获得m个第一数据后,处理器402可以调用元数据驱动引擎从bill_type中依次获得第二数据,比如,每获得一个第二 数据,处理器402就可以按照关联条件将获得的第二数据与m个第一数据进行关联,看获得的第二数据是否能与m个第一数据中的至少一个第一数据关联起来,如果获得的第二数据能与至少一个第一数据关联,即获得的第二数据与至少一个第一数据能够满足关联条件,则处理器402就获得了一组关联数据,这组关联数据包括该获得的第二数据与至少一个第一数据,这组关联数据就是待访问的数据中的数据,相当于处理器402需进行n次关联操作,在从bill_type中获得最后一个第二数据(即第n个第二数据)后,处理器402进行第n次关联操作,在第n次关联操作完毕后,处理器402可以得到待访问的数据,待访问的数据可以包括k组关联数据,k为小于等于n且大于等于0的整数,这k组关联数据就是待访问的数据。其中,从数据表中获得第一数据和第二数据的方式可参考如前实施例的描述,不多赘述。关联条件可以是数据访问请求中携带的,处理器402可以通过解析数据访问请求获得关联条件,从而对m个第一数据和n个第二数据进行关联。下面再通过一个例子来介绍关联操作的过程。比如数据访问请求为:selecta.telnumber,a.name,a.productid,b.product_namefromuser_ordera,productbwherea.telnumber=“13912345678”,b.product_type=“全球通”,a.productid=b.productid。其中a表(即user_order)包括1亿条数据,a表的存取类型为物理数据表类型,b表(即product)包括5000条数据,b表的存取类型为对象数据表类型,a表中符合a.telnumber=“13912345678”条件的数据比如有200条,b表中符合product_type=“全球通”条件的数据比如有300条。处理器402首先可以根据数据访问请求确定数据表的主从关系,例如规则可以是将数据量大的数据表作为主表,将其他数据表作为从表,即将a表作为主表,将b表作为从表。在确定主从关系后,处理器402首先根据数据访问请求确定主表中的数据的获取条件,即确定数据访问请求中携带的针对主表的访问条件,例如按照上面的 数据访问请求可知,a.telnumber=“13912345678”为针对主表的访问条件,处理器402调用物理数据表访问引擎,从主表中提取符合第一访问条件的数据,处理器402再根据数据访问请求确定从表中的数据的获取条件,即确定数据访问请求中携带的针对从表的访问条件,例如按照上面的数据访问请求可知,product_type=“全球通”为针对从表的访问条件。可选的,每从从表中提取一个数据,就可以将提取的数据与主表中的数据进行关联操作,关联条件可以携带在数据访问请求中,比如该例的数据访问请求中,a.productid=b.productid即为关联条件。其中,从表中获取的一个数据可能与主表中的至少一个数据具有关联关系,那么可以将从表中的该数据与主表中获取的至少一个数据作为一组关联数据,或者,从表中的某些数据也可能与主表中获取的任何数据都不具有关联关系,即都不满足关联条件,那么从表中获取的无法与主表中获取的任何数据关联的数据可能不是app要访问的数据,可以丢弃这部分数据,这样也有利于节省存储空间。可选的,在得到所有的关联数据后,可以仅将得到的关联数据作为所访问的数据进行反馈,而对于从表中获取的无法与主表中获取的任何数据关联的数据,以及对于主表中获取的无法与从表中获取的任何数据关联的数据,都可以丢弃。或者,在得到所有的关联数据后,不仅可以将得到的关联数据作为所访问的数据进行反馈,还可以将主表中获取的无法与从表中获取的任何数据关联的数据也作为所访问的数据进行反馈,这样用户得到的数据更完整。在得到所访问的数据后,处理器402可以通过发送器404将所访问的数据反馈给app,或者在得到所访问的数据后,处理器402也可以对所访问的数据进行排序(比如例2中可以按照账单类型进行排序),之后再通过发送器404反馈给app。前面的几个例子介绍了分开访问以及关联访问,即本发明实施例提供的技术方案根据不同的数据访问请求能够提供不同的访问结果,以满足不同的需求。可选的,处理器402还可以扫描数据库中存储的各种类型的数据表,比如可以定时或周期性扫描,或者也可以在用户的触发下进行扫描。比如扫描确定数据库中存储的第三数据表中包括的数据量大于预设阈值,处理器402可以确定第三数据表的存取类型,例如第三数据表的存取类型为对象数据表类型,那么为了提高数据库的访问性能,处理器402可以向app发送消息,app可以向用户输出第一提示信息,第一提示信息可以用于指示将第三数据表的存取类型转换为物理数据表类型。用户接收第一提示信息后,如果接受建议,则可以重新以物理数据表类型存储第三数据表中包括的数据。可选的,用户在需建立数据表时,可以先通过app向数据访问装置发送请求消息,例如用户需建立第四数据表,则用户通过app向数据访问装置发送请求消息,该请求消息中可以携带第四数据表包括的数据量。接收器403接收app发送的请求消息,处理器402可以确定第四数据表的数据量是否大于存储器401中存储的预设阈值,从而给出针对第四数据表的存储指示,例如如果第四数据表包括的数据量大于预设阈值,则处理器402可以指示以物理数据表类型的存储方式建立第四数据表,如果第四数据表包括的数据量小于等于预设阈值,则处理器402可以指示以对象数据表类型的存储方式建立第四数据表,发送器404可以将处理器402的指示发送给app,app可以输出第二提示信息。例如,如果第四数据表包括的数据量大于预设阈值,则第二提示信息可以用于指示以物理数据表类型的存储方式建立第四数据表,如果第四数据表包括的数据量小于等于预设阈值,则第二提示信息可以用于指示以对象数据表类型的存储方式建立第四数据表,用户后续可以根据第二提示信息来建立第四数据表。这样,根据不同的数据量可以建立不同类型的数据表,使得数据库中的存储方式更为合理,尽量提高访问性能。请参见图7,基于同一发明构思,本发明实施例还提供一种数据访问装置,该装置可以包括接收模块701和处理模块702,可选的,该装置还可以包括发送模块703。在实际应用中,该装置可以通过软件方式实现,或者也可以通过硬件方式实现,比如,该装置中的处理模块702对应的实体设备可以是图4a-图4b中的处理器402,接收模块701对应的实体设备可以是图4a-图4b中的接收器403,发送模块703对应的实体设备可以是图4b中的发送器404。该装置可以用于执行上述图6所述的方法,因此,对于该装置中的各单元所实现的功能等,可参考如前方法部分的描述,不多赘述。本发明实施例中,数据库可以同时支持两种存储方式,即数据库中的数据表的存取类型可以包括物理数据表类型及对象数据表类型,这样,针对不同的数据可以采用不同的存储方式,一方面可以考虑数据量较小的数据的存储灵活性,比如可以采用对象数据表类型的数据表存储数据量较小的数据,另一方面也可以考虑数据量较大的数据的高访问性能,比如可以采用物理数据表类型的数据表存储数据量较大的数据,等等,分别为不同的数据提供较为适合的存储方式,使得数据库中的存储方式更为合理。在访问数据时只需根据访问请求确定所访问的数据所在的数据表的类型即可实现对数据的访问,实现较为简单,便于推广使用。在本发明中,应该理解到,所揭露的装置、系统和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例。在本发明实施例中的各功能单元可以集成在一个处理单元中,或者各个单元也可以均是独立的物理模块。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:通用串行总线闪存盘(universalserialbusflashdrive)、移动硬盘、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,以上实施例仅用以对本发明的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明实施例的方法,不应理解为对本发明实施例的限制。本
技术领域
的技术人员可轻易想到的变化或替换,都应涵盖在本发明实施例的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1