一种数据对象的存储和查询方法、装置、设备和存储介质
技术领域
本发明涉及互联网技术领域,尤其涉及一种数据对象的存储和查询方法、装置、设备和存储介质。
背景技术
在互联网环境中存在海量的数据对象,而且数据对象的种类繁多,使得数据对象的属性类别千差万别。例如:在电商平台上展示有电器、图书、服装、日用百货等诸多品类的商品(数据对象),而各个品类的商品的属性类别之间存在异同之处,如:电器的属性类别包括功能属性,服装的属性类别包括尺码属性。
由于属性的集合可以用来表示数据对象,所以在存储数据对象时,可以存储数据对象的属性数据。但是,由于不同种类的数据对象的属性类别千差万别,导致用来存储不同种类数据对象的属性信息的字段多种多样,使得数据对象的属性信息只能尝试采用非关系型数据库来存储。
非关系型数据库是指非关系型的、分布式的、且一般不保证遵循ACID原则的数据存储系统。非关系型数据库以键值对存储数据且结构不固定,非关系型数据库中的每个元组可以有不一样的字段,每个元组可以根据需要增加一些键值对,不局限于固定的结构,可以减少一些时间和空间的开销。但是,由于非关系型数据库的结构性质导致非关系型数据库的稳定性不强,导致利用非关系型数据库进行数据对象存储和数据对象查询时数据库可靠性较差,容易存储或者查询失败,也容易出现宕机、服务器不可用等问题。
发明内容
本发明实施例的主要目的在于提供一种数据对象的存储和查询方法、装置、设备和存储介质,以解决现有技术中利用非关系型数据库进行数据对象存储和数据对象查询时数据库可靠性较差的问题。
针对上述技术问题,本发明实施例是通过以下技术方案来解决的:
本发明实施例提供了一种数据对象的存储方法,包括:获取待存储的数据对象的属性数据;读取配置中心配置的数据库模式;所述数据库模式是所述配置中心根据用于存储属性数据的非关系型数据库和关系型数据库的使用状态配置的;所述关系型数据库支持JavaScript对象简谱数据结构;将待存储的所述数据对象的属性数据存储到所述数据库模式指示的处于可用状态的数据库。
其中,所述数据库模式的种类包括:第一模式、第二模式和第三模式;其中,所述第一模式是指所述非关系型数据库的使用状态为可用状态,所述关系型数据库的使用状态为禁用状态;所述第二模式是指所述非关系型数据库的使用状态为可用状态,所述关系型数据库的使用状态为可用状态;所述第三模式是指所述非关系型数据库的使用状态为禁用状态,所述关系型数据库的使用状态为可用状态。
其中,在所述读取配置中心配置的数据库模式之后,还包括:如果确定前次读取的所述数据库模式为所述第一模式或者所述第三模式,本次读取的所述数据库模式为所述第二模式,则将所述非关系型数据库中存储的数据对象的属性数据和所述关系型数据库中存储的数据对象的属性数据进行同步。
其中,在所述将待存储的所述数据对象的属性数据存储到所述数据库模式指示的处于可用状态的数据库之时,还包括:将待存储的所述数据对象的属性数据同步缓存到位于本地的第一缓存;和/或,将待存储的所述数据对象的属性数据异步缓存到网关设备的第二缓存。
其中,所述将待存储的所述数据对象的属性数据存储到所述数据库模式指示的处于可用状态的数据库,包括:如果所述关系型数据库中缺少所述数据对象的属性数据对应的字段,则在存储所述数据对象的属性数据时,先利用所述JavaScript对象简谱数据结构的虚列字段,在所述关系型数据库中扩展出所述字段,再将所述数据对象的属性数据存储到所述数据库中。
本发明实施例还提供了一种数据对象的查询方法,包括:获取待查询的查询关键字;读取配置中心配置的数据库模式;所述数据库模式是所述配置中心根据用于存储属性数据的非关系型数据库和关系型数据库的使用状态配置的;所述关系型数据库支持JavaScript对象简谱数据结构;在所述数据库模式指示的处于可用状态的数据库中,查询与所述查询关键字相匹配的数据对象的属性数据并返回查询结果。
其中,所述数据库模式的种类包括:第一模式、第二模式和第三模式;其中,所述第一模式是指所述非关系型数据库的使用状态为可用状态,所述关系型数据库的使用状态为禁用状态;所述第二模式是指所述非关系型数据库的使用状态为可用状态,所述关系型数据库的使用状态为可用状态;所述第三模式是指所述非关系型数据库的使用状态为禁用状态,所述关系型数据库的使用状态为可用状态。
其中,在所述读取配置中心配置的数据库模式之后,还包括:如果确定前次读取的所述数据库模式为所述第一模式或者所述第三模式,本次读取的所述数据库模式为所述第二模式,则将所述非关系型数据库中存储的数据对象的属性数据和所述关系型数据库中存储的数据对象的属性数据进行同步。
其中,所述根据所述数据库模式,在所述非关系型数据库和所述关系型数据库中的处于可用状态的数据库中,查询与所述查询关键字相匹配的数据对象的属性数据,包括:如果所述数据库模式为第一模式,则在所述非关系型数据库中查询与所述查询关键字相匹配的数据对象的属性数据;如果所述数据库模式为第二模式,则先在所述非关系型数据库中查询与所述查询关键字相匹配的数据对象的属性数据;如果在所述非关系型数据库中未查询到与所述查询关键字相匹配的数据对象的属性数据,则再到所述关系型数据库中查询与所述查询关键字相匹配的数据对象的属性数据;如果所述数据库模式为第三模式,则在所述关系型数据库中查询与所述查询关键字相匹配的数据对象的属性数据。
其中,所述获取待查询的查询关键字,包括:通过所述网关设备获取待查询的查询关键字;在所述读取配置中心配置的数据库模式之前,还包括:通过所述网关设备在所述网关设备的第二缓存中,查询与所述查询关键字相匹配的数据对象的属性数据;如果所述第二缓存中存在与所述查询关键字相匹配的数据对象的属性数据,则返回查询结果;反之,则在位于本地的第一缓存中查询与所述查询关键字相匹配的数据对象的属性数据;如果在所述第一缓存中未查询到与所述查询关键字相匹配的数据对象的属性数据,则读取配置中心配置的数据库模式;反之,则返回查询结果。
本发明实施例还提供了一种数据对象的存储装置,包括:第一获取模块,用于获取待存储的数据对象的属性数据;第一读取模块,用于读取配置中心配置的数据库模式;所述数据库模式是所述配置中心根据用于存储属性数据的非关系型数据库和关系型数据库的使用状态配置的;所述关系型数据库支持JavaScript对象简谱数据结构;数据存储模块,用于将待存储的所述数据对象的属性数据存储到所述数据库模式指示的处于可用状态的数据库。
本发明实施例还提供了一种数据对象的查询装置,包括:第二获取模块,用于获取待查询的查询关键字;第二读取模块,用于读取配置中心配置的数据库模式;所述数据库模式是所述配置中心根据用于存储属性数据的非关系型数据库和关系型数据库的使用状态配置的;所述关系型数据库支持JavaScript对象简谱数据结构;数据查询模块,用于在所述数据库模式指示的处于可用状态的数据库中,查询与所述查询关键字相匹配的数据对象的属性数据并返回查询结果。
本发明实施例还提供了一种数据对象的存储设备,所述数据对象的存储设备包括:第一存储器、第一处理器及存储在所述第一存储器上并可在所述第一处理器上运行的计算机程序,所述计算机程序被所述第一处理器执行时实现上述任一项所述的数据对象的存储方法的步骤。
本发明实施例还提供了一种数据对象的查询设备,所述数据对象的查询设备包括:第二存储器、第二处理器及存储在所述第二存储器上并可在所述第二处理器上运行的计算机程序,所述计算机程序被所述第二处理器执行时实现上述任一项所述的数据对象的查询方法的步骤。
本发明实施例还提供了一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的数据对象的存储方法的步骤,或者,实现上述任一项所述的数据对象的查询方法的步骤。
本发明实施例的有益效果如下:
本发明实施例设置非关系型数据库和关系型数据库,将数据对象存储到可用状态的数据库中,避免存储失败和查询失败的问题发生,可以提升数据库的可用性和可靠性;使用支持JSON数据格式的关系型数据库,可以满足属性数据灵活扩展的需求,还可以存储大量差异化的数据对象。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明一实施例的数据对象的存储方法的流程图;
图2是根据本发明一实施例的数据对象的查询方法的流程图;
图3是根据本发明一实施例的数据对象的存储和查询系统的结构图;
图4是根据本发明一实施例的数据对象的查询的具体流程图;
图5是根据本发明一实施例的数据对象的存储装置的结构图;
图6是根据本发明一实施例的数据对象的查询装置的结构图;
图7是根据本发明一实施例的数据对象的存储设备的结构图;
图8是根据本发明一实施例的数据对象的查询设备的结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,以下结合附图及具体实施例,对本发明作进一步地详细说明。
根据本发明的实施例,首先提供了一种数据对象的存储方法。如图1所示,是根据本发明一实施例的数据对象的存储方法的流程图。
步骤S101,获取待存储的数据对象的属性数据。
数据对象是指数据实体。例如:数据对象为数据平台(电商平台)中的商品。数据对象可以使用一组属性来定义。
属性数据包括但不限于,数据对象对应的多个属性的值。
步骤S102,读取配置中心配置的数据库模式。
配置中心,用于监测非关系型数据库和关系型数据库的使用状态。使用状态包括:可用状态和禁用状态。可用状态表示允许对数据库进行读写操作。禁用状态是指暂停对数据库进行读写操作。
数据库模式是配置中心根据用于存储属性数据的非关系型数据库和关系型数据库的使用状态配置的。数据库模式用于指示处于可用状态的数据库,也即是数据对象的存储操作可以经由哪个数据库来完成。
数据库模式的种类包括但不限于:第一模式、第二模式和第三模式。
第一模式是指,非关系型数据库的使用状态为可用状态,关系型数据库的使用状态为禁用状态;
第二模式是指,非关系型数据库的使用状态为可用状态,关系型数据库的使用状态为可用状态;
第三模式是指,非关系型数据库的使用状态为禁用状态,关系型数据库的使用状态为可用状态。
可用状态是指数据库提供数据存储和查询服务。禁用状态是指数据库暂停提供数据存储和查询服务。进一步地,在数据库出现故障、数据库需要维护、数据库需要暂停使用时,数据库暂停提供数据存储和查询服务。
在本实施例中,关系型数据库支持JavaScript对象简谱数据结构(简称JSON数据结构)。关系型数据库可以扩展序列字段。
步骤S103,将待存储的所述数据对象的属性数据存储到所述数据库模式指示的处于可用状态的数据库。
如果所述数据库模式为第一模式,即仅所述非关系型数据库的使用状态为可用状态,则将待存储的所述数据对象的属性数据存储到非关系型数据库;
如果所述数据库模式为第二模式,即所述非关系型数据库和所述关系型数据库的使用状态都为可用状态,则将待存储的所述数据对象的属性数据分别存储到所述非关系型数据库和所述关系型数据库;
如果所述数据库模式为第三模式,即仅所述关系型数据库的使用状态为可用状态,则将待存储的所述数据对象的属性数据存储到所述关系型数据库。
在本实施例中,由于关系型数据库都支持JSON数据结构,所以将待存储的所述数据对象的属性数据存储到所述数据库模式指示的处于可用状态的数据库时,如果所述关系型数据库中缺少所述数据对象的属性数据对应的字段,则在存储所述数据对象的属性数据时,先利用所述JavaScript对象简谱数据结构的虚列字段,在所述关系型数据库中扩展出所述字段,再将所述数据对象的属性数据存储到所述数据库中。
在本实施例中,在读取配置中心配置的数据库模式之后,如果确定前次读取的所述数据库模式为所述第一模式或者所述第三模式,本次读取的所述数据库模式为所述第二模式,也即是说,配置中心将数据库模式从第一模式或者第三模式切换到第二模式,则将所述非关系型数据库中存储的数据对象的属性数据和所述关系型数据库中存储的数据对象的属性数据进行同步。进一步地,第一模式和第二模式都是对单数据库执行读写操作,因此,在从第一模式或者第三模式切换到第二模式之后,需要将非关系型数据库和关系型数据库进行数据同步,以便在查询数据对象时,可以提高查询效率。
在从第一模式切换到第二模式时,将非关系型数据库和关系型数据库进行同步,包括:将非关系型数据库中存储的所有数据对象的属性数据都同步到关系型数据中,或者,将前次数据同步到本次数据同步之间,所述非关系型数据中更新的数据对象的属性数据同步到关系型数据库中。
在从第三模式切换到第二模式时,将非关系型数据库和关系型数据库进行同步,包括:将关系型数据库中存储的所有数据对象的属性数据都同步到非关系型数据中,或者,将前次数据同步到本次数据同步之间,所述关系型数据中更新的数据对象的属性数据同步到非关系型数据库中。
由于非关系型数据库和关系型数据库都支持JSON数据结构,所以,在将非关系型数据库和关系型数据库进行同步时,可以直接从切换之前处于可用状态的数据库中读取数据对象的属性数据,将读取到的数据对象的属性数据存储到切换之前处于禁用状态的数据库中。
在本实施例中,将待存储的所述数据对象的属性数据同步缓存到位于本地的第一缓存中;和/或,将待存储的所述数据对象的属性数据异步缓存到网关应用所在的网关设备的第二缓存中。
在本实施例中,为了提升数据库的可用性和可靠性,预先设置非关系型数据库和关系型数据库,将数据对象存储到可用状态的数据库中,避免存储失败的问题发生;为了满足属性数据灵活扩展的需求,使用支持JSON数据格式的关系型数据库,进而可以存储大量差异化的数据对象。
在本实施例中,并行使用非关系型数据库和关系型数据库,即便其中一个数据库出现异常,也不会使数据对象存储过程出现抖动,更不会出现服务不可用的问题。关系型数据库由于是结构化的数据库,稳定性强,在运维层面上事故基本最高,事故响应快,使得数据对象在存储和查询上更加稳定。
基于上述数据对象的存储方法,本发明实施例还提供了一种数据对象的查询方法。如图2所示,为根据本发明一实施例的数据对象的查询方法的流程图。
步骤S201,获取待查询的查询关键字。
查询关键字可以是数据对象的属性的值。例如:数据对象的ID。
步骤S202,读取配置中心配置的数据库模式。
所述数据库模式是所述配置中心根据用于存储属性数据的非关系型数据库和关系型数据库的使用状态配置的。
所述关系型数据库支持JavaScript对象简谱数据结构。
步骤S203,在所述数据库模式指示的处于可用状态的数据库中,查询与所述查询关键字相匹配的数据对象的属性数据并返回查询结果。
如果查询关键字命中属性数据中属性值,则表示查询到与所述查询关键字相匹配的数据对象的属性数据。
如果查询到与所述查询关键字相匹配的数据对象的属性数据,则查询结果为数据对象的属性数据;如果未查询到与所述查询关键字相匹配的数据对象的属性数据,则查询结果为未查询到结果的提示信息。
具体而言,根据数据库模式,在非关系型数据库和关系型数据库中确定处于可用状态的数据库,在处于可用状态的数据库中,查询与所述查询关键字相匹配的数据对象的属性数据并返回查询结果。
如果所述数据库模式为第一模式,则在所述非关系型数据库中查询与所述查询关键字相匹配的数据对象的属性数据,并返回查询结果。
如果所述数据库模式为第二模式,则先在所述非关系型数据库中查询与所述查询关键字相匹配的数据对象的属性数据;如果在所述非关系型数据库中未查询到与所述查询关键字相匹配的数据对象的属性数据,则再到所述关系型数据库中查询与所述查询关键字相匹配的数据对象的属性数据,并返回查询结果;如果在所述非关系型数据库中查询到与所述查询关键字相匹配的数据对象的属性数据,则直接返回查询结果。进一步地,由于在将非关系型数据库中存储的数据对象的属性数据和关系型数据库中存储的数据对象的属性数据进行同步时,可能存在同步失败的情况,所以,在第二模式下,依然需要先在所述非关系型数据库中查询,再到所述关系型数据库中查询。
如果所述数据库模式为第三模式,则在所述关系型数据库中查询与所述查询关键字相匹配的数据对象的属性数据,并返回查询结果。
在本实施例中,为了提高查询效率,在所述读取配置中心配置的数据库模式之后,如果确定前次读取的所述数据库模式为所述第一模式或者所述第三模式,本次读取的所述数据库模式为所述第二模式,则将所述非关系型数据库中存储的数据对象的属性数据和所述关系型数据库中存储的数据对象的属性数据进行同步。
在本实施例中,如果在存储数据对象时,将数据对象的属性数据同步缓存到位于本地的第一缓存中,并且异步缓存到网关应用所在的网关设备的第二缓存中,则通过所述网关应用获取待查询的查询关键字,并且在所述读取配置中心配置的数据库模式之前,通过所述网关设备在所述网关设备的第二缓存中,查询与所述查询关键字相匹配的数据对象的属性数据;如果所述第二缓存中存在与所述查询关键字相匹配的数据对象的属性数据,则返回查询结果,反之,则在位于本地的第一缓存中查询与所述查询关键字相匹配的数据对象的属性数据;如果在所述第一缓存中未查询到与所述查询关键字相匹配的数据对象的属性数据,则读取配置中心配置的数据库模式;反之,则返回查询结果。
在本实施例中,为了提升数据库的可用性和可靠性,预先设置非关系型数据库和关系型数据库,将数据对象存储到可用状态的数据库中,避免查询失败的问题发生;为了提升查询效率,并行使用非关系型数据库和关系型数据库。关系型数据库由于是结构化的数据库,稳定性强,在运维层面上事故基本最高,事故响应快,使得数据对象在存储和查询上更加稳定。
在本实施例中,采用非关系型数据库、关系型数据库、本地第一缓存,异地第二缓存来存储数据对象,进而在查询数据对象时,通过网关设备提供的查询接口,按照异地第二缓存、本地第一缓存、非关系型数据库、关系型数据库的顺次查询数据对象,可以更为高效的查询到数据对象。异地第二缓存、本地第一缓存、非关系型数据库的查询速度较快,关系型数据库的读取量较大,可以应对大量的数据对象查询任务。
根据上述的数据对象存储方法和数据对象的查询方法,本发明实施例提供一种数据对象的存储和查询系统。如图3所示,为根据本发明一实施例的数据对象的存储和查询系统的结构图。
该数据对象的存储和查询系统,包括:配置设备301、运营设备302和网关设备303、非关系型数据库304和关系型数据库305。
配置设备301,用于运行配置中心。
运营设备302,用于执行数据对象的存储和查询。
网关设备303,用于为用户提供数据对象的查询接口。
非关系型数据库304和关系型数据库305,都用于提供针对数据对象的存储和查询的服务。
配置中心可以是zookeeper(分布式系统的可靠协调系统)。
非关系型数据库304可以是MongoDB数据库或者ElasticSearch数据库。
关系型数据库305可以是MySQL数据库。
第一缓存可以是位于网关设备303的JVM(Java Virtual Machine,简称Java虚拟机)的本地缓存。
第二缓存可以是位于运营设备302的R2M缓存Redis(Remote Dictionary Server,简称远程字典服务)数据库。
当然,本领域技术人员应当知道的是,运行配置中心的主体、执行数据对象的存储和查询的主体以及为用户提供数据对象的查询接口可以集成在同一个设备中,也可以分别设置到不同的设备(如本实施例所述)。
下面针对上述多个设备分别进行描述。
针对配置设备301,具体而言:
配置中心301,分别监测非关系型数据库304和关系型数据库305是否出现异常;如果非关系型数据库304出现异常,则配置中心301将非关系型数据库304的使用状态设置为禁用状态,否则,配置中心301将非关系型数据库304的使用状态设置为可用状态;如果关系型数据库305出现异常,则配置中心301将关系型数据库305的使用状态设置为禁用状态,否则,配置中心301将关系型数据库305的使用状态设置为可用状态。
数据库出现异常包括但不限于:数据库宕机且在预设时间段内不可修复。
配置中心301根据非关系型数据库304当前的使用状态和关系型数据库305当前的使用状态在第一模式、第二模式和第三模式之间切换。
第一模式,非关系型数据库304可以是MongoDB,存储和查询都使用MongoDB。
第三模式,关系型数据库305可以是MySQL,存储和查询都使用MySQL。
第二模式,关系型数据库305(MySQL)作为主存,非关系型数据库304(MongoDB)作为缓存,存储过程同时使用MongoDB和MySQL,查询过程先使用MongoDB,查询失败降级到MySQL进行查询。
针对运营设备302,具体而言:
运营设备302的执行步骤可以参考图1和图2介绍的方法步骤。
运营设备302在执行数据对象的存储流程时,包括:获取待存储的数据对象的属性数据;确定用于存储属性数据的非关系型数据库304和关系型数据库305的使用状态;在所述非关系型数据库304和所述关系型数据库305中,将所述数据对象的属性数据存储到使用状态为可用状态的数据库。
关系型数据库305支持JSON数据结构。可以利用JSON数据结构的虚列字段对数据库表中的字段进行动态的增减。
运营设备302读取配置中心301当前配置的数据库模式,根据该数据库模式可以确定非关系型数据库304和关系型数据库305的使用状态。
如果所述数据库模式为第一模式,则将待存储的所述数据对象的属性数据存储到非关系型数据库304。
如果所述数据库模式为第二模式,则将待存储的所述数据对象的属性数据存储到所述非关系型数据库304和所述关系型数据库305。
如果所述数据库模式为第三模式,则将待存储的所述数据对象的属性数据存储到所述关系型数据库305。
进一步地,可以在运营设备302中设置保存接口。进一步地,可以在运营设备302的基础数据应用中设置该接口。该保存接口可以为:GenericResult<Map<String,String>>save(Map<String,String>entity)。保存接口的入参为数据对象的属性数据。该属性数据可以属性内容map;其中,key为字段名称,value为字段值。在存储数据对象的属性数据时使用该保存接口。调用该保存接口传入的数据对象的属性数据,按照数据库模式进行存储,并根据数据对象的属性数据刷新第一缓存,并将数据对象的属性数据异步存储到第一缓存。
以第二模式为例:通过保存接口存储商品属性内容,如:skuId为123,color为red。此时的数据流向为:先将skuId和color等属性数据保存至MySQL的JSON类型字段(虚列字段),再保存至MongoDB,然后,异步刷新Redis缓存和网关设备侧的JVM缓存。
在数据库中包括数据库表。在数据库表中包括多行记录。每行记录包含该行中的所有信息。字段是比记录更小的单位,字段的集合形成记录,每个字段描述一种属性(即一个数据项),并有唯一的供计算机识别的字段标识符。在本实施例中,在存储数据对象时,一个数据对象可以存储到一行记录中,将数据对象的属性数据中的每种属性的值存储到该行对应的字段中。这样,如果数据库中缺少数据对象的属性数据对应的字段,则运营设备302在存储数据对象的属性数据时,可以利用JSON数据结构的虚列字段,在数据库中扩展出该字段。
为了后续方便进行数据对象的查询,运营设备302可以将待存储的数据对象的属性数据同步缓存到位于本地的第一缓存中,并且将待存储的所述数据对象的属性数据异步缓存到网关应用303所在的网关设备的第二缓存中。
运营设备302在执行数据对象的查询流程时,包括:获取待查询的查询关键字;确定用于存储属性数据的非关系型数据库304和关系型数据库305的使用状态;在所述非关系型数据库304和所述关系型数据库305中,确定使用状态为可用状态的数据库;在所述使用状态为可用状态的数据库中,查询与所述查询关键字相匹配的数据对象的属性数据并返回查询结果。
同样的,运营设备302依旧可以读取配置中心301当前配置的数据库模式,根据该数据库模式可以确定非关系型数据库304和关系型数据库305的使用状态。
运营设备302在读取配置中心301配置的数据库模式之后,如果确定前次读取的所述数据库模式为所述第一模式或者所述第三模式,本次读取的所述数据库模式为所述第二模式,则将所述非关系型数据库304中存储的数据对象的属性数据和所述关系型数据库305中存储的数据对象的属性数据进行同步。
下面给出一个运营设备302执行数据对象的查询的具体流程。如图4所示,是根据本发明一实施例的数据对象的查询的具体流程图。
步骤S401,通过网关设备获取查询关键字,并且通过该网关设备在该网关设备的第二缓存中,查询与查询关键字相匹配的数据对象的属性数据。
可以在网关设备的网关应用中设置查询接口。当然,也可以将查询接口设置在运营设备302的基础数据应用中,查询接口的设置根据需求而定即可。该查询接口可以是:GenericResult<Map<String,String>>getItem(String skuId)。该查询接口的入参为查询关键字。该查询关键字可以是数据对象的属性值,如数据对象的ID。该查询接口的返回值(查询结果)为数据对象的属性内容map;其中,key为字段名称,value为字段值。当查询单个数据对象的属性数据时,调用该查询接口传入的查询关键字,先查询JVM缓存中是否存在该查询关键字对应的属性数据,如果没有查询到,则到Redis缓存中查询,如果Redis缓存异常,则到MonogDB中查询,如果在MongoDB未查询到,则到MySQL中查询。
以第二模式为例:调用查询接口传入的待查询的商品ID,此时的数据流向为:先查找网关设备本地的JVM缓存中是否存在skuId为123对应的属性数据,如果没有命中,则查询Redis缓存中是否存在skuId为123对应的属性数据,如果还没有命中或者Redis异常,则在MongoDB中查询是否存在skuId为123对应的属性数据,如果MongoDB未查询到,则查询MySQL。
步骤S402,判断是否查询到与查询关键字相匹配的数据对象的属性数据;如果是,则执行步骤S415;如果否,则执行步骤S403。
步骤S403,如果在第二缓存中未查询到与查询关键字相匹配的数据对象的属性数据,则在位于本地的第一缓存中查询与查询关键字相匹配的数据对象的属性数据。
在第二缓存中未能查询到与查询关键字相匹配的数据对象的属性数据,可能是由于第二缓存中不包括与查询关键字相匹配的数据对象的属性数据,或者第二缓存出现异常。
步骤S404,判断是否查询到与查询关键字相匹配的数据对象的属性数据;如果是,则执行步骤S415;如果否,则执行步骤S405。
步骤S405,如果在第一缓存中未查询到与查询关键字相匹配的数据对象的属性数据,则确定当前的数据库模式是否为第二模式;如果是,则执行步骤S406;如果否,则执行步骤S410。
在第一缓存中未能查询到与查询关键字相匹配的数据对象的属性数据,可能是由于第一缓存中不包括与查询关键字相匹配的数据对象的属性数据,或者第一缓存出现异常。
步骤S406,在非关系型数据库中查询与查询关键字相匹配的数据对象的属性数据。
步骤S407,判断是否查询到与查询关键字相匹配的数据对象的属性数据;如果是,则执行步骤415;如果否,则执行步骤S408。
步骤S408,在关系型数据库中查询与查询关键字相匹配的数据对象的属性数据。
步骤S409,判断是否查询到与查询关键字相匹配的数据对象的属性数据;如果是,则执行步骤415;如果否,则执行步骤S416。
步骤S410,确定当前的数据库模式是否为第一模式;如果是,则执行步骤S411,如果否,则执行步骤S413。
步骤S411,在非关系型数据库中查询与查询关键字相匹配的数据对象的属性数据。
步骤S412,判断是否查询到与查询关键字相匹配的数据对象的属性数据;如果是,则执行步骤415;如果否,则执行步骤S416。
步骤S413,在关系型数据库中查询与查询关键字相匹配的数据对象的属性数据。
步骤S414,判断是否查询到与查询关键字相匹配的数据对象的属性数据;如果是,则执行步骤415;如果否,则执行步骤S416。
步骤S415,返回与查询关键字相匹配的数据对象的属性数据。
步骤S416,返回查询失败的提示信息。
在针对数据对象进行存储和查询的过程中,如果运营设备302确定前次读取的数据库模式为第一模式或者第三模式,本次读取的数据库模式为第二模式,则将非关系型数据库304中存储的数据对象的属性数据和关系型数据库305中存储的数据对象的属性数据进行同步。进一步地,在同步之后,还可以对非关系型数据库304中存储的数据对象的属性数据和关系型数据库305中存储的数据对象的属性数据进行比较,如果发现有不同之处,即未同步成功的数据,则可以再次进行同步,或者人工进行同步,使非关系型数据库304中存储的数据对象的属性数据和关系型数据库305中存储的数据对象的属性数据一致。
本发明实施例可以在保证查询效率的同时,大幅提高存在属性类别差异的非关系型数据对象的存储的可靠性。进一步地,如果数据对象为商品数据,则本发明实施例可以满足商品数据灵活扩展性需求、数据库的高效查询需求、数据库的高可用性需求、大量差异化的商品数据存储的需求。
本发明实施例提供了一种数据对象的存储装置。如图5所示,为根据本发明一实施例的数据对象的存储装置的结构图。
该数据对象的存储装置,包括:第一获取模块501,第一读取模块502和数据存储模块503。
第一获取模块501,用于获取待存储的数据对象的属性数据。
第一读取模块502,用于读取配置中心配置的数据库模式;所述数据库模式是所述配置中心根据用于存储属性数据的非关系型数据库和关系型数据库的使用状态配置的;所述关系型数据库支持JavaScript对象简谱数据结构。
数据存储模块503,用于在所述非关系型数据库和所述关系型数据库中,将待存储的所述数据对象的属性数据存储到所述数据库模式指示的处于可用状态的数据库。
由于本发明实施例所述的数据对象的存储装置的功能已经在上述实施例中进行了描述,故本实施例的描述中未详尽之处,可以参见前述实施例中的相关说明,在此不做赘述。
基于上述数据对象的存储装置。本发明实施例还提供了一种数据对象的查询装置。图6为根据本发明一实施例的数据对象的查询装置的结构图。
该数据对象的查询装置,包括:第二获取模块601,第二读取模块602和数据查询模块603。
第二获取模块601,用于获取待查询的查询关键字。
第二读取模块602,用于读取配置中心配置的数据库模式;所述数据库模式是所述配置中心根据用于存储属性数据的非关系型数据库和关系型数据库的使用状态配置的;所述关系型数据库支持JavaScript对象简谱数据结构。
数据查询模块603,用于根据所述数据库模式,在所述非关系型数据库和所述关系型数据库中的处于可用状态的数据库中,查询与所述查询关键字相匹配的数据对象的属性数据并返回查询结果。
由于本发明实施例所述的数据对象的查询装置的功能已经在上述实施例中进行了描述,故本实施例的描述中未详尽之处,可以参见前述实施例中的相关说明,在此不做赘述。
本发明实施例还提供一种数据对象的存储设备。如图7所示,为根据本发明一实施例的数据对象的存储设备的结构图。
在本实施例中,所述数据对象的存储设备包括但不限于:第一处理器701和第一存储器702。
所述第一处理器701用于执行第一存储器702中存储的数据对象的存储程序,以实现上述所述的数据对象的存储方法。
具体而言,所述第一处理器701用于执行第一存储器702中存储的数据对象的存储程序,以实现以下步骤:获取待存储的数据对象的属性数据;读取配置中心配置的数据库模式;所述数据库模式是所述配置中心根据用于存储属性数据的非关系型数据库和关系型数据库的使用状态配置的;所述关系型数据库支持JavaScript对象简谱数据结构;在所述非关系型数据库和所述关系型数据库中,将待存储的所述数据对象的属性数据存储到所述数据库模式指示的处于可用状态的数据库。
其中,所述数据库模式的种类包括:第一模式、第二模式和第三模式;其中,所述第一模式是指所述非关系型数据库的使用状态为可用状态,所述关系型数据库的使用状态为禁用状态;所述第二模式是指所述非关系型数据库的使用状态为可用状态,所述关系型数据库的使用状态为可用状态;所述第三模式是指所述非关系型数据库的使用状态为禁用状态,所述关系型数据库的使用状态为可用状态。
其中,在所述读取配置中心配置的数据库模式之后,还包括:如果确定前次读取的所述数据库模式为所述第一模式或者所述第三模式,本次读取的所述数据库模式为所述第二模式,则将所述非关系型数据库中存储的数据对象的属性数据和所述关系型数据库中存储的数据对象的属性数据进行同步。
其中,在所述将待存储的所述数据对象的属性数据存储到所述数据库模式指示的处于可用状态的数据库之时,还包括:将待存储的所述数据对象的属性数据同步缓存到位于本地的第一缓存;和/或,将待存储的所述数据对象的属性数据异步缓存到网关设备的第二缓存。
其中,所述将待存储的所述数据对象的属性数据存储到所述数据库模式指示的处于可用状态的数据库,包括:如果所述关系型数据库中缺少所述数据对象的属性数据对应的字段,则在存储所述数据对象的属性数据时,先利用所述JavaScript对象简谱数据结构的虚列字段,在所述关系型数据库中扩展出所述字段,再将所述数据对象的属性数据存储到所述数据库中。
本发明实施例还提供一种数据对象的查询设备。如图8所示,为根据本发明一实施例的数据对象的查询设备的结构图。
在本实施例中,所述数据对象的查询设备包括但不限于:第二处理器801和第二存储器802。
所述第二处理器801用于执行第二存储器802中存储的数据对象的查询程序,以实现上述所述的数据对象的查询方法。
具体而言,所述第二处理器801用于执行第二存储器802中存储的数据对象的查询程序,以实现以下步骤:获取待查询的查询关键字;读取配置中心配置的数据库模式;所述数据库模式是所述配置中心根据用于存储属性数据的非关系型数据库和关系型数据库的使用状态配置的;所述关系型数据库支持JavaScript对象简谱数据结构;根据所述数据库模式,在所述非关系型数据库和所述关系型数据库中的处于可用状态的数据库中,查询与所述查询关键字相匹配的数据对象的属性数据并返回查询结果。
其中,所述数据库模式的种类包括:第一模式、第二模式和第三模式;其中,所述第一模式是指所述非关系型数据库的使用状态为可用状态,所述关系型数据库的使用状态为禁用状态;所述第二模式是指所述非关系型数据库的使用状态为可用状态,所述关系型数据库的使用状态为可用状态;所述第三模式是指所述非关系型数据库的使用状态为禁用状态,所述关系型数据库的使用状态为可用状态。
其中,在所述读取配置中心配置的数据库模式之后,还包括:如果确定前次读取的所述数据库模式为所述第一模式或者所述第三模式,本次读取的所述数据库模式为所述第二模式,则将所述非关系型数据库中存储的数据对象的属性数据和所述关系型数据库中存储的数据对象的属性数据进行同步。
其中,所述根据所述数据库模式,在所述非关系型数据库和所述关系型数据库中的处于可用状态的数据库中,查询与所述查询关键字相匹配的数据对象的属性数据,包括:如果所述数据库模式为第一模式,则在所述非关系型数据库中查询与所述查询关键字相匹配的数据对象的属性数据;如果所述数据库模式为第二模式,则先在所述非关系型数据库中查询与所述查询关键字相匹配的数据对象的属性数据;如果在所述非关系型数据库中未查询到与所述查询关键字相匹配的数据对象的属性数据,则再到所述关系型数据库中查询与所述查询关键字相匹配的数据对象的属性数据;如果所述数据库模式为第三模式,则在所述关系型数据库中查询与所述查询关键字相匹配的数据对象的属性数据。
其中,所述获取待查询的查询关键字,包括:通过所述网关设备获取待查询的查询关键字;在所述读取配置中心配置的数据库模式之前,还包括:通过所述网关设备在所述网关设备的第二缓存中,查询与所述查询关键字相匹配的数据对象的属性数据;如果所述第二缓存中存在与所述查询关键字相匹配的数据对象的属性数据,则返回查询结果;反之,则在位于本地的第一缓存中查询与所述查询关键字相匹配的数据对象的属性数据;如果在所述第一缓存中未查询到与所述查询关键字相匹配的数据对象的属性数据,则读取配置中心配置的数据库模式;反之,则返回查询结果。
本发明实施例还提供了一种存储介质。这里的存储介质存储有一个或者多个程序。其中,存储介质可以包括易失性存储器,例如随机存取存储器;存储器也可以包括非易失性存储器,例如只读存储器、快闪存储器、硬盘或固态硬盘;存储器还可以包括上述种类的存储器的组合。
当计算机可存储介质中一个或者多个程序可被一个或者多个处理器执行,以实现上述的数据对象的存储方法或者数据对象的查询方法。由于在上述实施例中已经对数据对象的存储方法和数据对象的查询方法进行了详细描述,故在此不做赘述。
以上所述仅为本发明的实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。