具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
图1示例了一种数据读取的场景,如图1所示,业务服务器11至业务服务器13上可以运行业务代码,该业务代码可以读取缓存空间14中存储的业务数据。例如,以一种发布产品的业务为例,该业务运行时可以将产品发布到网上供用户选择和查看,那么缓存空间14中存储的可以是产品数据,业务代码可以读取该产品数据,并将产品数据发布到客户端,展示对应的产品。
将业务数据存储在缓存空间14,是为了提高业务代码读取数据时的效率,具体实施中,可以是由业务代码初次从业务数据的发布空间(例如,发布服务器)中读取业务数据后,放入缓存空间14,后续就可以从该缓存空间14读取数据,加快读取速度。
上述的业务服务器11至业务服务器13上,可能需要读取不同的业务数据,例如,不同的服务器读取同一业务主体的不同版本的数据。比如,对于发布产品的业务,在产品发布期间,产品数据会更新(例如,新增字段),但是并不是所有的业务服务器同时发布新产品,可以是先在一部分服务器发布,而后逐步扩展到所有服务器。在图1中,可以是业务服务器11仍旧发布旧产品,业务服务器12和业务服务器13发布新产品;那么,业务服务器11就需要读取旧产品数据,而业务服务器12和业务服务器13需要读取新产品数据,即不同的服务器可能要读取同一产品的不同发布版本的产品数据。
由图1中还可以看到,新旧服务器读取产品数据是在同一缓存空间,比如,业务服务器11至业务服务器13,读取产品数据时都要在缓存空间14中读取。本申请的实施例中,缓存空间14中可以存储有新产品数据和旧产品数据,即同一产品的不同发布版本的产品数据都在该缓存空间14,业务服务器在读取业务数据,例如上述例子中的产品数据时,可以按照图2所示的数据读取方法进行读取,以避免出现数据读取错乱的问题。
如图2所示,在步骤201中,获取待读取的业务数据的数据主键,同一业务主体的不同版本的业务数据分别对应不同的数据主键。
在步骤202中,在业务数据的存储空间中,读取与数据主键对应的业务数据。
以产品发布期间的产品数据的读取为例,来说明上述图2的数据读取流程。在缓存空间14中,产品数据存储时,还会同时存储一个对应该产品数据的数据主键,以方便后续在读取产品数据时根据该主键读取。该数据主键也可以称为缓存key。在产品数据的例子中,缓存key可以包括:产品ID、产品数据的版本发布日期。当然该缓存key也可以包括其他的内容,或者,在非产品数据的其他业务数据的例子中,数据主键也可以包括其他的业务主体(例如,在产品数据例子中,业务主体即为产品)标识以及业务数据的版本发布日期。如下的表1示例了产品数据及数据主键的对应关系:
表1
例如,一个缓存key可以是:
productxqueryProductDetailById20150917[20151124000230020000440063428244
其中,“productxqueryProductDetailById”为固定字符;“20150917”为每次产品改动后的版本日期;“20151124000230020000440063428244”为产品ID。在该缓存key中,产品ID即产品标识,“20150917”为产品数据的版本发布日期。
该版本发布日期能够起到区分同一产品的不同发布版本的作用,例如,假设一个产品是在2015年09月17日发布的,该产品的产品数据在缓存空间存储时,使用的缓存key可以是如上所示例的key。而假如随着业务的发展,对于同一个产品进行了改进,要发布该产品的新的产品数据,并且假设新产品数据是在2016年01月10日发布,那么缓存key可以是:
productxqueryProductDetailById20160110[20151124000230020000440063428244
由上述例子可以看到,当在同一缓存空间同时存储有同一产品的不同发布版本的产品数据时,不同版本的产品数据对应的缓存key是不同的,并且可以在缓存key中设置版本发布日期,以方便根据版本发布日期区分不同版本的产品数据。
需要说明的是,数据主键比如产品数据的缓存key,并不限制使用上述例子中的结构格式,只要起到能标识同一业务主体的不同版本的业务数据的作用即可,同一业务主体的不同版本的业务数据可以使用不同的数据主键,以使得新旧业务数据即使存储在同一存储空间,也能通过数据主键进行区分。
在存储空间14按照上面描述的方式存储产品数据后,比如,以缓存key与产品数据对应存储,并且同一产品的不同版本的产品数据使用不同的主键,新旧的业务服务器可以去缓存空间读取所需的产品数据,新服务器读取新业务数据,旧服务器读取旧业务数据。
参见图2所示的流程,业务服务器获取待读取的业务数据的数据主键时,该步骤中,可以是业务服务器上运行的业务代码中包括了数据主键,而在本步骤中,业务代码在运行时只要找到其中包括的数据主键即可。本实施例中,同一业务主体的不同版本的业务数据分别对应不同的数据主键,比如,要发布旧产品的业务服务器11上的业务代码中,数据主键可以是包含版本发布日期20150917的缓存key,而发布新产品的业务服务器12和业务服务器13中,数据主键可以是包含版本发布日期20160110的缓存key。
在步骤202中,业务服务器去缓存空间14读取产品数据时,可以根据在步骤201中得到的数据主键,在缓存空间14中查找与该数据主键对应的产品数据。例如,与包含版本发布日期20150917的缓存key对应的产品数据是旧的产品数据,业务服务器11读取该旧产品数据后发布旧产品;与包含版本发布日期20160110的缓存key对应的产品数据是新的产品数据,业务服务器12和业务服务器13读取该新产品数据后发布新产品。
通过本实施例的数据读取方法可以看到,通过根据数据主键读取对应的业务数据,并且同一业务主体的不同版本的业务数据对应不同的数据主键,就使得即使是同一产品,不同版本的产品数据可以用不同的数据主键区分,从而能够根据数据主键准确的读取到所需的业务数据,不会出现数据读取错乱的情况,旧业务代码只会读取到旧产品数据,不会出现无法解析新产品数据的问题,而新业务代码也只会读取到新产品数据,不会出现读取到旧产品数据导致产品数据错误的问题。
此外,缓存空间的数据可以是业务服务器将发布空间的业务数据,读取到缓存中的,如果是旧业务代码读取了旧产品数据后放到缓存空间,那么新业务代码在读取业务数据时(新旧代码要读取的数据对应的是同一产品,只是分别是不同的产品版本),先去缓存空间查看是否有自己所需的业务数据。在查看时,可以根据数据主键(例如,包含了数据的版本发布日期),看缓存空间是否存在该数据主键。上述的旧业务代码放入缓存空间的是旧业务数据,并且在缓存空间是以包含旧的发布日期的缓存key索引该旧业务数据,那么新业务代码在查看所需的数据主键时,将发现缓存空间并不存在该主键,表明该缓存空间还尚未存储新业务数据。
则新业务代码可以由业务数据的发布空间读取新业务数据,并将新业务数据和对应的数据主键放入缓存空间,这样缓存空间中就同时存储了新旧业务数据及各自的主键,后续新旧服务器都可以从该缓存空间读取业务数据,且根据不同的数据主键分别读取各自所需的业务数据。
上述的方法描述了对于同一缓存空间存储的同一产品的不同版本数据,新旧服务器如何分别读取的方法,主要是根据数据主键,同一产品的不同版本的产品数据分别对应不同的数据主键,从而使得可以根据主键清楚准确的读取到所需的数据。当所有业务服务器都发布新产品完成后,即所有的服务器都使用了新业务代码,那么新业务代码均读取缓存空间中的新产品数据。
由于本申请实施例的方法有效防止了产品发布过程中的数据读取错乱的问题,不会出现数据发布错误或者系统异常的问题,提高了系统的可用性,也给访问产品的用户提供了更好的体验。
本申请实施例还提供了一种数据读取装置,如图3所示,该装置可以包括:主键获取模块31和数据读取模块32。
主键获取模块31,用于获取待读取的业务数据的数据主键,同一业务主体的不同版本的业务数据分别对应不同的数据主键;
数据读取模块32,用于在所述业务数据的存储空间中,读取与所述数据主键对应的业务数据。
在一个例子中,所述业务数据的存储空间为缓存空间,所述不同版本的业务数据存储在同一个所述缓存空间。
如图4所示,该装置还可以包括:数据处理模块33,用于在所述缓存空间中不存在与所述数据主键对应的业务数据时,则由所述业务数据的发布空间读取业务数据,并将所述业务数据和对应的数据主键放入所述缓存空间。
在一个例子中,所述数据主键中包括:业务主体标识、以及业务数据的版本发布日期。
在一个例子中,所述同一业务主体的不同版本的业务数据,为同一产品的不同发布版本的产品数据。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。