背景技术
数据库是指按照数据结构来组织、存储和管理数据的仓库。在信息化社会中,通过数据库管理数据资源,可以充分有效的利用资源。
而随着技术的进步以及市场需求的提高,服务提供商用于执行业务的系统也变得越发复杂,使得数据库也需要不断的更新,以匹配系统的需求。例如,假设某系统之前只处理A和B两种业务,需要的存储的业务数据也只需要支持A、B两种业务的处理即可。进一步假设,系统更新后需要处理的业务类型变成A、B、C三种,则原有数据库中存储的业务数据便可能难以支持各业务的处理,因此需要对数据库中的业务数据进行更新。并且,通常会将更新的业务数据迁移至新的数据库中,直到当确定新数据库可支持业务处理时,再删除旧的数据库。
在现有技术中,对于较为复杂的系统,对数据库进行升级是一项耗时耗力的工作,为了保持数据的一致性,通常需要先让整个系统停止执行业务,之后在由该系统的各子系统的维护人员,分别对各子系统的数据库进行业务数据的更新以及检查。在检查业务数据无误之后,再基于新数据库以及新系统,进行内测,测试业务执行的是否正常。最后当一切正常后,再重新启动新系统,并基于新数据库处理业务。
具体的,现有系统升级时的数据迁移的过程可如图1所示的各步骤:
S100:暂停业务处理,确定历史业务的业务日志;
在数据迁移之前,需要先对整个系统均暂停处理业务,以便对系统进行升级。其中,由于新系统所采用的业务模型,无需使用业务数据,因此在暂停系统业务处理之前,新系统的业务模型通常已经完成编译校验工作。并等待支持新系统运行的新数据库迁移完成后,再进行进一步校验。而该业务日志用于后续基于新数据库执行历史业务时,验证业务结果是否会出现错误,从而判断新数据库是否可用。
S101:根据预设的结构化查询语言(Structured Query Language,SQL)转换脚本,将数据库存储的业务数据进行转换,得到新数据库;
如前文所述,当系统暂停处理业务之后,便可由该系统的各子系统的维护人员,对各子系统的业务数据进行转换。将转换后的业务数据迁移至新数据库中。其中,该SQL转换脚本通常由人工根据需要进行编译。
S102:判断新数据库中的业务数据是否符合要求,若是,则执行步骤S103,若否执行步骤S104;
在现有技术中,该步骤主要由工作人员对转换后的业务数据进行检查,判断是否符合预期的转换结果。当系统中包含多个子系统需要分别进行数据迁移时,需要各子系统的工作人员分别对其维护的新数据库进行检查。
针对每个子系统,当确定该子系统的新数据库符合条件后,需要等待其他子系统的判断结果,只有当所有子系统的新数据库均符合预期的转换结果时,才可执行步骤S103。当任一子系统的新数据库不符合要求,则需要工作人员执行步骤S104,对SQL转换脚本进行调整,以便对不符合要求的新数据库进行调整。
S103:根据新系统的业务模型以及转换后的业务数据,执行业务,并判断业务执行结果与历史业务的业务日志是否一致,若是,则执行步骤S105,若否则执行步骤S106;
当确定系统中各子系统的新数据库均符合要求后,便可进一步对新系统的业务模型是否有问题进行检查。具体可基于新数据库以及新系统,重复处理历史上已经执行过的业务,根据历史业务的业务日志以及业务执行结果,判断新系统的业务模型是否存在问题。
S104:删除所述新数据库,并修改SQL转换脚本,重新对数据库存储的业务数据进行转换,重新得到新数据库并进行判断,直至新数据库中的业务数据符合要求为止;
当在步骤S102中判断过程中出现不符合预期的结果,则相应的子系统的工作人员可删除该子系统的新数据库,之后对SQL转换脚本进行调整,并重复步骤S101以及步骤S102。
S105:确定业务数据迁移完成,并根据新数据库以及新系统业务处理;
S106:调整所述新系统的业务模型,并重新根据新数据库执行业务,直至重新执行的业务执行结果与历史业务的业务日志一致为止。
由于执行步骤S103的前提是确定新数据库中的业务数据符合预期,因此仍然出现业务执行结果与业务日志不符合的情况时,通常是由于新系统的业务模型存在问题,因此可对新系统的业务模型进行调整,直至业务执行结果与业务日志中记录的一致为止。
可见,现有数据迁移的方法,在进行数据迁移时,需要暂停业务。并且,需要系统的各子系统的新数据库全部检查无误后,再继续后续步骤。导致数据迁移成本较高,效率较低,因此本说明书对应提供一种新的数据迁移的方法。
具体实施方式
为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图2为说明书实施例提供的一种数据迁移的过程,具体可包括以下步骤:
S200:暂停接收业务。
在本说明书一个或多个实施例中,分别以复杂的系统以及简单的系统为例对数据迁移过程进行说明。首先以复杂系统为例,如前所述,该系统具体可以是服务提供方用于处理业务的系统,并且该系统由若干子系统组成。当然,子系统是在业务链路上进行不同业务处理的子系统,还是分布式系统中的各子系统,本说明书不做限定。
并且,各子系统具体可以是由服务器以及数据库组成的。对于子系统的服务器,是单独的一台设备还是多台设备组成的集群,本说明书也不做限定。同理,对于子系统的数据库本说明书也不限定该数据库是单独的一台设备还是多台设备。需要说明的是,该服务器中可存储有用于执行业务的业务模型。
具体的,该系统可如图3所示,在图3中可见该系统由多个子系统组成,并且,各子系统分别配置有对应的第一数据库。如图3中,子系统a由服务器 a以及第一数据库a组成,子系统b由服务器b以及第一数据库b组成,等等。
由于系统在对接收的业务进行处理时,处理结果可能涉及对第一数据库中业务数据的变更,因此在数据迁移过程中若仍然接收业务,则可能会造成业务数据的错误。例如,假设第一数据库a中有业务数据x,迁移至第二数据库a 可得到业务数据x’。而进一步假设,在得到业务数据x’之后,接收了业务并进行处理,将第一数据库a中的业务数据x更新为了业务数据x1。则此时,由于业务数据x1与业务数据x’并没有对应的迁移关系,导致第二数据库a中的业务数据出现错误。
为了减少第二数据库中业务数据出现错误的概率,在本说明书一个或多个实施例中,针对每个子系统,可先暂停该子系统对业务的接收,以执行后续步骤。
另外,为了减少对业务的影响,该子系统可在自身业务低峰期暂停接收业务。或者,该子系统也可在预设的时间段内,暂停接收业务。当然,其中业务低峰期,以及该预设时间可根据需要设置,本说明书对此不做限定。
例如,当子系统接收到的业务量为高峰期的1%时,确定子系统处于业务低峰期,并暂停接收业务。或者,当统计出子系统在每天22点到5点接收业务的频率较低,则确定在预设时间段22点到5点,暂停接收业务。
需要说明的是,由于系统中各子系统的作用可能不完全相同,因此不同的子系统暂停接收业务的时间可能也不完全相同。而各子系统只需要关注自身对应的数据迁移过程即可,而无需关注其他子系统的情况。其中,子系统的业务低峰期直接说明了,在低峰期内子系统涉及的业务量较低,因此即使该子系统是业务链路上的一环,也可降低暂停业务的影响。
S202:根据预设转换规则,将第一数据库中的业务数据进行转换,得到第二数据库。
在本说明书中,继续以系统有若干子系统组成为例,以一个子系统进行说明,当该子系统执行步骤S200暂停接收业务之后,该子系统可根据预设的转换规则,将自身对应的第一数据库中的业务数据进行转换,并迁移至该子系统对应的第二数据库中。其中,第二数据库可为预先准备好用于存储迁移数据的数据库,并且,具体可由维护该子系统的工作人员准备,或者统一准备。
例如,某企业的系统由子系统a、b、c组成,假设子系统a、b、c分别在北京、上海、深圳,并由在北京、上海、深圳当地的工作人员进行维护,则当需要对系统升级进行数据迁移时,分别由各地工作人员准备子系统a、b、c分别对应的第二数据库。
具体的,在本说明书中,并不限定具体采用何种方式将第一数据库中的业务数据进行转换,可根据需要进行设置。例如,可以采用与现有技术相同的方法,通过预先编写的SQL转换脚本对数据进行转换。并将每个转换后的业务数据,迁移至第二数据库中,同时保留第一数据库中的业务数据不变。
需要说明的是,子系统对应的第一数据库中的业务数据,均经过转换,并迁移至该子系统对应的第二数据库之后,可确定得到了该子系统对应的第二数据库。
S204:基于所述第一数据库重新开始执行业务,根据业务执行结果和所述转换规则,更新所述第二数据库,以及校验所述第二数据库中的业务数据。
在本说明书中,当得到该子系统对应的第二数据库之后,该子系统便可重新开始接收业务,并基于子系统对应的第一数据库执行业务,以减少暂停业务带来的影响。同时,还可对第二数据库中的业务数据是否可用、是否符合转换的预期结果进行校验,以便在校验通过后,执行后续步骤。
具体的,对该子系统来说,当得到对应的第二数据库之后,可重启业务。此时,该子系统仍然采用原有对应的第一数据库中的业务数据,来处理业务,也就是与步骤S200之前该子系统执行业务的状态并无不同。
并且,由于该子系统执行业务,得到的业务执行结果后,该业务执行结果可能也会导致第一数据库中业务数据的变化。例如,业务数据为账户A中存款为100,当业务为向账户A转账10块时,业务数据需变更为账户A中存款为 110。因此,为了保证子系统对应第一数据库中的业务数据与第二数据库中的业务数据是等价的,在本说明书中,还可根据业务执行结果和步骤S202中采用的转换规则,更新该第二数据库。以保证子系统对应的第一以及第二数据库中业务数据是等价的,即,第一以及第二数据库中,业务数据的数据结构或者数据形式可能不同,但是所表达的信息是一致的。例如上例中的,两个数据库中可能以不同数据结构,表示账户A中存款为110。
具体的,首先,子系统可在业务重启之后,确定业务执行结果对应的第一数据库的更新日志。通常在执行业务时,若对数据库中的业务数据进行更新,则会将更新的内容、更新时间等信息记录在更新日志中。于是,子系统可确定业务重启后的各更新日志,以便根据更新日志,确定第一数据库的变更,从而更新第二数据库。例如,假设第一数据库的类型为MySQL数据库,则可确定重启业务之后创建的各二进制日志binlog。
之后,由于对数据库的更新是有时间先后顺序,需要按照时间先后顺序更新业务数据才能保证数据的准确性,因此子系统还可按照时间先后顺序,依次针对每个更新日志,根据预设的转换规则,确定对第二数据库的更新,并对第二数据库进行更新。其中,该转换规则具体可以是根据更新日志,确定适用于第二数据库的SQL语句的规则。于是,针对每个更新日志,子系统都可以确定出该更新日志对应的SQL语句,并在该第二数据库中执行确定出的SQL语句,从而更新第二数据库。
具体的,该转换规则可以是与步骤S202中的转换规则一致的规则,则本说明书中的转换规则,既可包含对业务数据进行转换的规则,也可包含对更新日志进行转换的规则。由于更新日志本来就是记录SQL语句对应的更新的,因此根据更新日志也可反推出对应的第一数据库的SQL语句,之后可根据SQL 语句之间的转换方法,确定与第一数据库的SQL语句等价的第二数据库的SQL 语句。现有技术中基于对象关系映射框架Hibernate便可实现,将不同类型的数据库的SQL语句进行等价转换,本说明书对此不再赘述。
另外,在本说明书中,在基于第一数据库重新开始执行业务的同时,还可对子系统的对应的第二数据库中的业务数据进行校验。具体的,可采用与现有技术中相同的方法,由人工进行数据校验。
具体的,由于针对接收的每个业务,实际上子系统是对第一以及第二数据库进行了“双写”操作,因此在校验时,可针对该子系统对应的第二数据库与对应的第一数据库中的业务数据是否等价进行校验。
本说明书对于数据校验具体如何进行,不做限定,可以采用与现有技术相同的方法。
S206:当校验通过后,确定数据迁移完毕,并启用所述第二数据库用于执行业务。
在本说明书中,以一个子系统进行说明,当该子系统确定校验通过后,判断是否存在未通过校验的其他子系统,若是,则继续执行步骤S204中更新第二数据库的过程,直至该系统中每个子系统对应的第二数据库都通过校验为止,若否,则确定整个系统校验通过,数据迁移过程结束,并且,可启用该子系统对应的第二数据库用于处理业务。
具体的,对于由多个子系统组成的系统来说,只有当每个子系统对应的第二数据库都通过校验时,才可确定整个系统校验通过,数据迁移过程才可以确定结束。则此时,系统中各子系统可启用自身对应的第二数据库来处理业务。而当仍有子系统未通过校验时,则通过校验的子系统可以停止校验,并继续“双写”操作,保证第一以及第二数据库中业务数据等价。
基于图2所述的数据迁移过程,将数据库中的数据进行迁移之后,可立刻重新开始接收业务,并基于原有数据库(即,第一数据库)中的业务数据执行业务,而在校验第二数据库中的业务数据的同时,根据业务执行结果和转换规则,保持第一第二数据库中业务数据的等价,直至确定校验通过后,启动第二数据库用于执行业务。相较于现有技术采用的方法,暂停接收业务的时间较短,对业务影响较小,降低了数据迁移的复杂程度,提高了效率。
另外,在本说明书一个或多个实施例中,步骤S204在对第二数据库中的业务数据进行校验时,除了校验该子系统对应的第二数据库与对应的第一数据库中的业务数据是否等价以外,还可先对该子系统对应的第二数据库中的业务数据是否符合转换预期进行校验。例如,校验业务数据的数据结构是否符合预期,业务数据是否存在转换逻辑上的问题等等。当确定第二数据库中的业务数据符合预期之后,可再根据业务执行结果和转换规则,更新第二数据库。并在第二数据库更新完毕之后,对第一与第二数据库中的业务数据是否等价进行校验。
也就是校验过程可分为3个过程,首先,校验第二数据库的业务数据符合预期,之后更新第二数据库,保持第二数据库与第一数据库在业务上的一致,最后,校验第一与第二数据库中的业务数据是否等价。其中,一旦校验结果为第二数据库的业务数据不符合预期,或者第一与第二数据库中的业务数据不等价,则可删除第二数据库,并对转换规则进行调整。然后重复步骤S200至步骤S204,直至确定校验通过为止。
进一步地,在本说明书中,对于由若干子系统组成的系统来说,相对于现有技术,各子系统可以根据自身条件,确定何时暂停接收业务,避免了现有技术中,需要所有子系统统一停止业务,并进行数据迁移的弊端。
另外,由于现有技术中需要所有子系统统一停止业务,使得数据迁移在时间上有着严格的规定,到时便需要重新恢复业务,使得需要投入的成本激增(如,需要投入大量的人力物力保证各子系统在时限前完成数据迁移)。而通过本说明书提供的实施例,由于子系统可分别暂停进行数据迁移,在数据迁移完毕前可以一直重复对两个数据库的“双写”,因此不再存在时间上的限制,可有效降低成本。
需要说明的是,本说明书实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤S100和步骤S102的执行主体可以为设备1,步骤S102的执行主体可以为设备2;或者,步骤S100的执行主体可以为设备1,步骤S102和步骤S104的执行主体可以为设备2;等等。上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例中,以单个系统为例进行说明,该系统可如图4所示。当然,该系统中的服务器可以是服务器集群,数据库也可以是多台设备组成的,但是单个服务器或者单个设备并不能组成独立的子系统,因此无论设备是单个还是多个,该系统仍是单个系统。
对应步骤S200,该系统可以在自身的业务低峰期,暂停接收业务,之后步骤S202中以及步骤S204中,与前文类并无差别,最后,该系统只要确定对第二数据库校验通过后,便可确定业务迁移完毕。由于系统中不再存在子系统,因此前述实施例中,需要等待其他子系统通过校验的过程可省略。
基于图2所述的数据迁移的方法,本说明书实施例还提供一种数据迁移的装置,如图5所示。
图5为本说明书实施例提供的一种多行省略显示的装置的结构示意图,包括:
业务接收模块300,暂停接收业务;
转换模块302,根据预设转换规则,将第一数据库中的业务数据进行转换,得到第二数据库;
执行模块304,基于所述第一数据库重新开始执行业务,根据业务执行结果和所述转换规则,更新所述第二数据库,以及校验所述第二数据库中的业务数据;
数据库选择模块306,当校验通过后,确定数据迁移完毕,并启用所述第二数据库用于执行业务。
处理业务的系统由若干子系统组成,所述业务接收模块300,针对业务链路上的每个子系统,该子系统在业务低峰期时暂停接收业务。
各子系统分别配置有对应的第一数据库,所述转换模块302,该子系统根据预设的转换规则,将该子系统对应的第一数据库中的业务数据进行转换,得到该子系统对应的第二数据库,其中,各子系统预设的转换规则不完全相同。
所述执行模块304,根据该子系统执行业务的结果,确定该子系统对应的第一数据库的中业务数据的变更,根据该子系统的转换规则以及所述业务数据的变更,调整该子系统对应的第二数据库中的业务数据。
所述执行模块304,校验该子系统对应的第二数据库与对应的第一数据库中的业务数据是否等价。
所述执行模块304,当校验未通过时,删除该子系统对应的第二数据库,并调整该子系统的转换规则,重新在该子系统在业务低峰期时暂停接收业务,根据调整后的转换规则,将该子系统对应的第一数据库中的业务数据进行转换,重新得到该子系统对应的第二数据库,基于该子系统对应的第一数据库重新开始执行业务,以及校验重新得到的该子系统对应的第二数据库,直至校验通过为止。
所述数据库选择模块306,当确定所述系统的每个子系统对应的第二数据库都校验通过后,确定数据迁移完毕。
所述执行模块304,当校验未通过时,删除所述第二数据库,并调整所述预设的转换规则重新暂停接收业务,根据调整后的转换规则,将所述第一数据库中的业务数据进行转换,重新得到第二数据库,基于所述第一数据库重新开始执行业务,以及重新校验重新得到的所述第二数据库中的业务数据,直至校验通过为止。
基于图2所示的数据迁移的方法,本说明书实施例还提供一种服务器,如图6所示,其中,所述服务器包括:一个或多个处理器及存储器,存储器存储有程序,并且被配置成由一个或多个处理器执行以下步骤:
暂停接收业务;
根据预设转换规则,将第一数据库中的业务数据进行转换,得到第二数据库;
基于所述第一数据库重新开始执行业务,根据业务执行结果和所述转换规则,更新所述第二数据库,以及校验所述第二数据库中的业务数据;
当校验通过后,确定数据迁移完毕,并启用所述第二数据库用于执行业务。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray, FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、 Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL (Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL (RubyHardware Description Language)等,目前最普遍使用的是VHDL (Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、 CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和 /或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/ 或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。